diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/Documentation/ADXAuthentication.md b/Documentation/ADXAuthentication.md new file mode 100644 index 0000000..15fdfa6 --- /dev/null +++ b/Documentation/ADXAuthentication.md @@ -0,0 +1,87 @@ +# Authentication + +To create a settings file interactively use: `mathworks.internal.adx.buildSettingsFile`. + +Template JSON configuration files for various authentication approaches can be +found in `matlab-azure-adx/Software/MATLAB/config` + +In general for initial testing Client Secret based authentication is the simplest +to configure an work with. To use other approaches it is recommended to contact +MathWorks®: . + +Certain authentication methods require the additional use of the Azure Java SDK +authentication support as documented in [Authentication.md](Authentication.md). + +| Authentication Method | JSON file field value | Java SDK support required | +|:----------------------|:----------------------|:-------------------------:| +| Client Secret | clientSecret | No | +| Interactive Browser | interactiveBrowser | Yes | +| Device Code | deviceCode | Yes | +| Managed Identity | managedIdentity | Yes | + +If you wish to use an Azure authentication method that is not listed please contact MathWorks at: . + +## Settings file fields + +The default settings file is: `matlab-azure-adx/Software/MATLAB/config/adx.Client.Settings.json` +Alternative names and paths can be used if required. +Depending on the authentication method used different fields are required. The +template files for the documented methods show the fields for the various methods. + +For example Interactive Browser uses: + +```json +{ + "preferredAuthMethod" : "interactiveBrowser", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} +``` + +In use the fields `controlBearerToken` and `dataBearerToken` will be added to the file +to cache the short lived bearer token values the control and data planes. These values are sensitive and should not be exposed. + +| Field name | Description | +|:--------------------|:------------| +| preferredAuthMethod | Indicated the authentication approach to use, e.g. clientSecret | +| tenantId | Azure tenant ID | +| subscriptionId | Azure subscriptions ID | +| clientId | ID of the Application Registration used to connect to ADX | +| clientSecret | Secret value corresponding to the clientId, this value is sensitive and should not be exposed | +| resourceGroup | Azure resource group containing the ADX instance | +| database | Default database name to use | +| cluster | Default cluster name to use | + +## Client Secret + +Client Secret authentication is sometimes referred to as "Application Secret" as the +secrets created apply to Application Registrations. This package uses the term "Client +Secret or `clientSecret`as appropriate. + +Client secret does not use the "Secret ID" value and it should not be confused with the +Client ID (sometimes called the App ID) or the Client Secret itself. + +## BaseClient extension + +The file `matlab-azure-adx/Software/MATLAB/app/system/+adx/+control/BaseClient.m` +implements the base client for the interface's API call classes. +In this file there are well commented hook points to which custom authentication +code can be integrated if required. This topic should be discussed with MathWorks +to clarify is custom code is necessary. + +## Bearer Tokens + +The lower-level `+api` classes and some higher-level functions accept an optional +argument `bearerToken` directly if the authentication process to obtain the token +is handled by some external means. Note that the KQL queries and management commands +will require different tokens as they use different endpoints. + +## References + +* Azure Services authentication [https://github.com/mathworks-ref-arch/matlab-azure-services/blob/main/Documentation/Authentication.md](https://github.com/mathworks-ref-arch/matlab-azure-services/blob/main/Documentation/Authentication.md) + +[//]: # (Copyright 2023-2024 The MathWorks, Inc.) diff --git a/Documentation/ADXGettingStarted.md b/Documentation/ADXGettingStarted.md new file mode 100644 index 0000000..e29e283 --- /dev/null +++ b/Documentation/ADXGettingStarted.md @@ -0,0 +1,551 @@ +# Getting Started + +Azure Data Explorer (ADX) commands can be broadly separated into two classes: + +* Data queries, which transact data on the platform +* Control queries, which relate to the platform itself + +This document will describe some examples of each and how they are structured. +It does not attempt to cover the complete KQL syntax or all of the control options +that are available. For further detailed refer to the [API reference](ADXAPI.md) +and Azure's documentation. + +The following examples assume that the package has previously been configured with +connection and authentication details, see: [ADXAuthentication](ADXAuthentication.md). + +The REST API interface used by this package can be somewhat verbose in some cases +once familiar with its behavior it is generally straightforward to create wrapper +functions in MATLAB that more concisely address a task. Some such reference implementations +are provided. + +> MathWorks reserves the `internal` namespace and functions within this namespace +> are subject to change or removal without notice and should not be used. + +## Data queries + +### Hello World KQL query + +#### `run` command + +The following reference implementation `mathworks.adx.run` is a high-level +wrapper that abstracts the different types of queries under a generic `run` method. +For more advanced use cases it may be required to drop to the lower-level interfaces +described below. + +The query requests that "Hello World" be printed. This is returned as a table with +a column names "mycol". the success value is a logical indicating success of the +call or not, additional optional outputs are not displayed in this example: + +```matlabsession +>> [result, success] = mathworks.adx.run('print mycol="Hello World"') +result = + table + mycol + _____________ + "Hello World" +success = + logical + 1 +``` + +To get the contents of an entire table once can run the following command, here Parallel +processing of the resulting data has been enabled (if available), with a threshold +of 10000 rows of data. For more details on optimization see: [Performance.md](Performance.md). + +```matlabsession +[result, success] = mathworks.adx.run('table("tableName", "all")', , useParallel=true, parallelThreshold=10000) +``` + +#### `KQLQuery` command + +At a lower-level the above run command in this case calls the `KQLQuery` reference +implementation, here we also display the `requestId` which can be used for corelation: + +```matlabsession +>> [result, success, requestId] = mathworks.adx.KQLQuery('print mycol="Hello World"') + +result = + table + mycol + _____________ + "Hello World" + +success = + logical + 1 + +requestId = + "4faa0b41-e308-4436-a113-376aa20da525" +``` + +#### REST interface + +At a still lower-level one can work with the REST interface more directly. +A `adx.data.models.QueryRequest` request object is first created. The `.db` property +is configured with the database name of interest. If not provided a default, if set, +will be read from the configuration file. The query itself `print Test="Hello World"` +is assigned to the `.csl` property. In this case no request properties are assigned +to the `propertiesProp` property. This will be used in a later example. + +```matlabsession +% build a request object +req = adx.data.models.Query +Request; +req.db = "mydatabasename"; +req.csl = 'print Test="Hello World"' +req = +QueryRequest with properties: + + csl: "print mycol="Hello World"" + db: "mydatabasename" + propertiesProp: [] +``` + +The ADX cluster is assigned and with it a default scope. A default cluster and scope +can be set in the configuration to avoid setting them for exact query and or having +the values appear in source code. The ADX configuration may require that multiple +scopes would be set. + +```matlabsession +% Configure a cluster and scope, defaults to be read from configuration files in future +cluster = "https://myclustername.myregion.kusto.windows.net"; +scopes = ["https://myclustername.myregion.kusto.windows.net/.default"]; +``` + +Now a `adx.data.api.Query` query object is created using the scope(s). + +```matlabsession +% Create a query object +query = adx.data.api.Query('scopes', scopes); +query = +Query with properties: + + serverUri: [0×0 matlab.net.URI] + httpOptions: [1×1 matlab.net.http.HTTPOptions] + preferredAuthMethod: [0×0 string] + bearerToken: '' + apiKey: '' + httpCredentials: '' + apiVersion: "2022-11-11" + subscriptionId: '' + tenantId: '' + clientSecret: '' + clientId: '' + scopes: "https://myclustername.myregion.kusto.windows.net/.default" + cookies: [1×1 adx.CookieJar] + +``` + +Having configured the query object it can now be run the request that was previously +created on a given cluster, if a default is not used: + +```matlabsession +[code, result, response] = query.queryRun(req, cluster) + +code = + StatusCode enumeration + OK +result = + 1×5 QueryV2ResponseRaw array with properties: + + FrameType + Version + IsProgressive + TableId + TableKind + TableName + Columns + Rows + HasErrors + Cancelled + OneApiErrors + +response = + ResponseMessage with properties: + + StatusLine: 'HTTP/1.1 200 OK' + StatusCode: OK + Header: [1×11 matlab.net.http.HeaderField] + Body: [1×1 matlab.net.http.MessageBody] + Completed: 0 +``` + +Assuming success the result is a number of *Frames* that describe and contain tabular data. +This data can be converted to native MATLAB tables for ease of use. +Three tables are returned 2 containing metadata and a 3rd containing the data of, +interest, it is named the `PrimaryResult`. + +```matlabsession +tables = mathworks.internal.adx.queryV2Response2Tables(result) +tables = + 3×1 cell array + {1×3 table} + {1×1 table} + {3×12 table} +>> tables{1}.Properties.Description +ans = + '@ExtendedProperties' +>> tables{2}.Properties.Description +ans = + 'PrimaryResult' +>> tables{3}.Properties.Description +ans = + 'QueryCompletionInformation' +>> tables +``` + +Looking at the `PrimaryResult` shows the response to the query: + +```matlabsession +>> tables{2} +ans = + table + mycol + _______________ + "Hello World" +``` + +Putting the commands together: + +```matlab +% build a request object +request = adx.data.models.QueryRequest(); +colName = "myOutput"; +message = "Hello World"; +% set the KQL query +request.csl = sprintf('print %s="%s"', colName, message); +% Don't set the database use the default in .json config file +% request.db = "myDatabaseName" +% No adx.data.models.ClientRequestProperties required +% request.requestProperties +% Create the Query object and run the request +query = adx.data.api.Query(); +% The default cluster to use is configured using a .json configuration file +% Run the query: +[code, result, response] = query.queryRun(request); %#ok +if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); +else + error('Error running query: %s', request.csl); +end +``` + +### Configuring request properties, to use tSQL using the low-level interface + +The higher-level interface `mathworks.adx.tSQLQuery` automatically configures +the required request property to enable tSQL. However, as an example of how properties +can be configured directly using the lower level the following example is illustrative. +Note the `KQLQuery` and `run` commands both accept properties as optional arguments. + +If not using the KQL language syntax the the *T-SQL* syntax can be used to write +queries. This is accomplished the query property `query_language` to `sql`. + +```matlab +request = adx.data.models.QueryRequest(); +request.csl = query; +% Don't set the database use the default in .json config file +% request.db = "databaseName"; + +% Configure ClientRequestPropertiesOptions & then ClientRequestProperties +crpo = adx.data.models.ClientRequestPropertiesOptions; +crpo.query_language = "sql"; +crp = adx.data.models.ClientRequestProperties(); +crp.Options = crpo; +request.requestProperties = crp; + +% Create the Query object and run the request +query = adx.data.api.Query(); +[code, result, response] = query.queryRun(request); +``` + +A reference implementation shows how this can be more concisely used: + +```matlab +% Run the SQL query 'SELECT top(10) * FROM mytable' to return the 1st 10 row of a table +[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.tSQLQuery('SELECT top(10) * FROM mytable') +``` + +The additional return values can be used to indicate if the query failed: + +```matlab +if dataSetCompletion.HasErrors || dataSetCompletion.Cancelled + error("Query had errors or was cancelled"); +end +``` + +### Count the rows in a table, using the lower level interfaces + +A query to count the rows in a table using KQL syntax: + +```matlab +req = adx.data.models.QueryRequest; +req.csl = "['mytable'] | count"; + +q = adx.data.api.Query(); +[code, result, response] = q.queryRun(req); %#ok +if code == matlab.net.http.StatusCode.OK + [result, resultTables] = mathworks.internal.adx.queryV2Response2Tables(result); + count = result.Count; +end +``` + +In more detail, this example is based on a table created from the `airlinesmall.csv` +data set that is included with matlab use `which('airlinesmall.csv')` to get its +location. The result returned should be: 123523. + +> Note that in early releases some warnings about unsupported data types and conversions may be expected. + +```matlabsession +% Create a request +req = adx.ModelsDataPlane.QueryRequest; +req.db = "mydatabasename"; +% The table name is: airlinesmallcsv; +% Kusto query string to count the rows in a given table +req.csl = "['airlinesmallcsv'] | count"; + +scopes = ["https://myclustername.myregion.kusto.windows.net/.default"]; +cluster = "https://myclustername.myregion.kusto.windows.net"; + +q = adx.data.api.Query('scopes', scopes); +[code, result, response] = queryRun(q, req, cluster); + +tables = + 3×1 cell array + {1×3 table} + {1×1 table} + {3×12 table} +ans = + table + Count + ______ + 123523 +c = + int64 + 123523 +ans = + 'int64' +``` + +### Progressive query execution + +To execute a query in progressive mode the query request option property `results_progressive_enabled` +should be set to true. + +```matlab +query = "['tableName '] | take " + 100; +args = {"database", database "propertyNames", "results_progressive_enabled", "propertyValues", {true}, "verbose", false}; +[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); +``` + +### Get a list of tables + +Get a list of tables and table properties: + +```matlab +req = adx.data.models.QueryRequest('db', 'mydatabase', 'csl', '.show tables details'); +[code, result, response] = q.queryRun(req); +``` + +Or more concisely: + +```matlab +tableList = mathworks.adx.listTables(database="mydatabase") +``` + +### Export data to a local parquet file + +The following example code exports an entire table to a known blob using +a Shared Access Signature blob URL. The resulting parquet file can be read +into a MATLAB table using `parquetread`. Parquet is recommended over CSV and +other formats for speed and data integrity reasons. + +```matlab +exportURL = "https://myaccount.blob.core.windows.net/"; +exportURI = matlab.net.URI(exportURL); +SAS = exportURI.EncodedQuery; +query = "table('mytableName', 'all')"; +[tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query); +if ~tf + error("exportToBlob failed"); +end + +downloadURL = result.Path(1) + "?" + SAS; +downloadURI = matlab.net.URI(downloadURL); +localFile = websave("exportedTable.gz.parquet", downloadURI); +T = parquetread(localFile); +``` + +### Ingest a table from a local a table + +To ingest large volumes of data from MATLAB then the `ingestFile` and `ingestTable` +functions can be used: + +```matlab +% Read some sample data from a parquet file to create a MATLAB table +inputTable = parquetread(parquetFile); +% Ingest the table into a given table +[success, result] = mathworks.adx.ingestTable(inputTable, tableName=tableName); +``` + +To ingest small amounts of data from a MATLAB variable, typically a table the +`ingestInline`. This function is not suitable for bulk data or high performance +requirements. + +```matlab +localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); +tableName = "outages"; +praquetTable = parquetread(localPath); +ingestData = praquetTable(1,:); + +[success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData) + +success = + logical + 1 +result = + 1x5 table + ExtentId ItemLoaded Duration HasErrors OperationId + ______________________________________ _____________________________________________ ________ _________ ______________________________________ + "8de6b799-6e12-4994-b57b-ed75e15db0a8" "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf" 00:00:00 false "cd4184ca-0d31-4c42-a273-5f2953f76ddf" +requestId = + "63bb1cea-b589-45ac-82ad-00d68ca96aeb" +extentId = + "8de6b799-6e12-4994-b57b-ed75e15db0a8" +``` + +To ingest from another source in ADX itself rather than MATLAB see `ingestFromQuery`. + +### Higher-level data handling functions + +The following higher-level functions are provided to assist in common operations when working with data. +Use `doc mathworks.adx.` for more details. + +* createTable - Creates a table in a given database +* dropTable - Drops a table from a given database +* exportToBlob - Exports data to an Azure blob +* ingestFile - Ingests a local file to Azure Data Explorer using Azure blob +* ingestFileQueue - Ingests a local file to Azure Data Explorer using Azure blob & queue *(work in progress, do not use)* +* ingestTable - Ingests a MATLAB table to an Azure Data Explorer Table +* ingestTableQueue - Ingests a MATLAB table to an Azure Data Explorer Table *(work in progress, do not use)* +* ingestInline - Ingests limited amounts of data into Kusto directly from MATLAB +* ingestFromQuery - Ingest data using the result of a command or query +* listTables - Returns a list of tables and their properties +* tableExists - Returns true is a given table exists + +## Control queries + +### List Clusters + +Start by creating a `Clusters` object: + +```matlabsession +>> clusters = adx.Api.Clusters +clusters = + Clusters with properties: + + serverUri: [0×0 matlab.net.URI] + httpOptions: [1×1 matlab.net.http.HTTPOptions] + preferredAuthMethod: [0×0 string] + bearerToken: '' + apiKey: '' + httpCredentials: '' + apiVersion: "2022-11-11" + subscriptionId: '' + tenantId: '' + clientSecret: '' + clientId: '' + cookies: [1×1 adx.CookieJar] +``` + +Call the `clustersList` method: + +```matlabsession +>> [code, result, response] = clusters.clustersList +code = + StatusCode enumeration + OK +result = + ClusterListResult with properties: + + value: [1×1 adx.Models.Cluster] +response = + ResponseMessage with properties: + + StatusLine: 'HTTP/1.1 200 OK' + StatusCode: OK + Header: [1×13 matlab.net.http.HeaderField] + Body: [1×1 matlab.net.http.MessageBody] + Completed: 0 + +``` + +Examine the result, in this case there is one cluster: + +```matlabsession +>> result.value +ans = + Cluster with properties: + + sku: [1×1 adx.Models.AzureSku] + systemData: [0×0 adx.Models.systemData] + zones: "1" + identity: [1×1 adx.Models.Identity] + xproperties: [1×1 adx.Models.ClusterProperties_1] + etag: ""2023-01-04T12:40:35.3452388Z"" + id: "/subscriptions/0674/resourceGroups/mbadx/providers/Microsoft.Kusto/Clusters/myclustername" + name: "myclustername" + type: "Microsoft.Kusto/Clusters" + +>> result.value.sku +ans = + AzureSku with properties: + + name: Dev_No_SLA_Standard_E2a_v4 + capacity: 1 + tier: Basic +``` + +> The `[tf, cluster] = mathworks.adx.isClusterRunning(...)` command is a convenient function to +> easily determine if a default or given cluster is running or not. + +### Management + +```matlab +% Get Identity token +m = adx.data.api.Management('scopes', dataPlaneScopes) +req = adx.data.models.ManagementRequest +req.csl = '.get kusto identity token' +ingestCluster = "https://ingest-myadxcluster.westeurope.kusto.windows.net" +[code, result, response] = m.managementRun(req, ingestCluster) + +q = adx.data.api.Ingest() +``` + +More concisely using configured defaults: + +```matlab +m = adx.data.api.Management() +req = adx.data.models.ManagementRequest +req.csl = '.get kusto identity token' +[code, result, response] = m.managementRun(req) +``` + +## References + +For more sample commands see: + +* Example code: `Software/MATLAB/adxDemo.m` +* Basic test code: `Software/MATLAB/test/unit/*.m` + +For further API reference information see: + +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/access-control/how-to-authenticate-with-aad](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/access-control/how-to-authenticate-with-aad) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/) +* [https://learn.microsoft.com/en-us/rest/api/azurerekusto/](https://learn.microsoft.com/en-us/rest/api/azurerekusto/) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/connection-strings/kusto](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/connection-strings/kusto) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/sql-cheat-sheet](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/sql-cheat-sheet) + +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/APIReference.md b/Documentation/APIReference.md index f6ebdaf..dabf78a 100644 --- a/Documentation/APIReference.md +++ b/Documentation/APIReference.md @@ -1,4577 +1,10050 @@ -# API Reference +# MATLAB Interface *for Azure Services* - API Reference + +Classes, methods and functions that include the terms `private` or `internal` in their namespace should not be used directly. +They are subject to change or removal without notice. +The majority of `adx.control` APIs are generated using OpenAPI. see: [OpenAPI.md](OpenAPI.md) + +## Index + +* MATLAB Interface *for Azure Services* + * [adx](#adx) + * [adx.control](#adxcontrol) + * [adx.control.api](#adxcontrolapi) + * [adx.control.api.AttachedDatabaseConfigurations](#adxcontrolapiattacheddatabaseconfigurations) + * [adx.control.api.AttachedDatabaseConfigurations.AttachedDatabaseConfigurations](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurations) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCheckNameAvailability](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationschecknameavailability) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCreateOrUpdate](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationscreateorupdate) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsDelete](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationsdelete) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsGet](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationsget) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsListByCluster](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationslistbycluster) + * [adx.control.api.ClusterPrincipalAssignments](#adxcontrolapiclusterprincipalassignments) + * [adx.control.api.ClusterPrincipalAssignments.ClusterPrincipalAssignments](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignments) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCheckNameAvailability](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentschecknameavailability) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCreateOrUpdate](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentscreateorupdate) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsDelete](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentsdelete) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsGet](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentsget) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsList](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentslist) + * [adx.control.api.Clusters](#adxcontrolapiclusters) + * [adx.control.api.Clusters.Clusters](#adxcontrolapiclustersclusters) + * [adx.control.api.Clusters.clustersAddLanguageExtensions](#adxcontrolapiclustersclustersaddlanguageextensions) + * [adx.control.api.Clusters.clustersCheckNameAvailability](#adxcontrolapiclustersclusterschecknameavailability) + * [adx.control.api.Clusters.clustersCreateOrUpdate](#adxcontrolapiclustersclusterscreateorupdate) + * [adx.control.api.Clusters.clustersDelete](#adxcontrolapiclustersclustersdelete) + * [adx.control.api.Clusters.clustersDetachFollowerDatabases](#adxcontrolapiclustersclustersdetachfollowerdatabases) + * [adx.control.api.Clusters.clustersDiagnoseVirtualNetwork](#adxcontrolapiclustersclustersdiagnosevirtualnetwork) + * [adx.control.api.Clusters.clustersGet](#adxcontrolapiclustersclustersget) + * [adx.control.api.Clusters.clustersList](#adxcontrolapiclustersclusterslist) + * [adx.control.api.Clusters.clustersListByResourceGroup](#adxcontrolapiclustersclusterslistbyresourcegroup) + * [adx.control.api.Clusters.clustersListFollowerDatabases](#adxcontrolapiclustersclusterslistfollowerdatabases) + * [adx.control.api.Clusters.clustersListLanguageExtensions](#adxcontrolapiclustersclusterslistlanguageextensions) + * [adx.control.api.Clusters.clustersListSkusByResource](#adxcontrolapiclustersclusterslistskusbyresource) + * [adx.control.api.Clusters.clustersMigrate](#adxcontrolapiclustersclustersmigrate) + * [adx.control.api.Clusters.clustersRemoveLanguageExtensions](#adxcontrolapiclustersclustersremovelanguageextensions) + * [adx.control.api.Clusters.clustersStart](#adxcontrolapiclustersclustersstart) + * [adx.control.api.Clusters.clustersStop](#adxcontrolapiclustersclustersstop) + * [adx.control.api.Clusters.clustersUpdate](#adxcontrolapiclustersclustersupdate) + * [adx.control.api.DataConnections](#adxcontrolapidataconnections) + * [adx.control.api.DataConnections.DataConnections](#adxcontrolapidataconnectionsdataconnections) + * [adx.control.api.DataConnections.dataConnectionsCheckNameAvailability](#adxcontrolapidataconnectionsdataconnectionschecknameavailability) + * [adx.control.api.DataConnections.dataConnectionsCreateOrUpdate](#adxcontrolapidataconnectionsdataconnectionscreateorupdate) + * [adx.control.api.DataConnections.dataConnectionsDataConnectionValidation](#adxcontrolapidataconnectionsdataconnectionsdataconnectionvalidation) + * [adx.control.api.DataConnections.dataConnectionsDelete](#adxcontrolapidataconnectionsdataconnectionsdelete) + * [adx.control.api.DataConnections.dataConnectionsGet](#adxcontrolapidataconnectionsdataconnectionsget) + * [adx.control.api.DataConnections.dataConnectionsListByDatabase](#adxcontrolapidataconnectionsdataconnectionslistbydatabase) + * [adx.control.api.DataConnections.dataConnectionsUpdate](#adxcontrolapidataconnectionsdataconnectionsupdate) + * [adx.control.api.DatabasePrincipalAssignments](#adxcontrolapidatabaseprincipalassignments) + * [adx.control.api.DatabasePrincipalAssignments.DatabasePrincipalAssignments](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignments) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCheckNameAvailability](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentschecknameavailability) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCreateOrUpdate](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentscreateorupdate) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsDelete](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentsdelete) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsGet](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentsget) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsList](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentslist) + * [adx.control.api.Databases](#adxcontrolapidatabases) + * [adx.control.api.Databases.Databases](#adxcontrolapidatabasesdatabases) + * [adx.control.api.Databases.databaseInviteFollower](#adxcontrolapidatabasesdatabaseinvitefollower) + * [adx.control.api.Databases.databasesAddPrincipals](#adxcontrolapidatabasesdatabasesaddprincipals) + * [adx.control.api.Databases.databasesCheckNameAvailability](#adxcontrolapidatabasesdatabaseschecknameavailability) + * [adx.control.api.Databases.databasesCreateOrUpdate](#adxcontrolapidatabasesdatabasescreateorupdate) + * [adx.control.api.Databases.databasesDelete](#adxcontrolapidatabasesdatabasesdelete) + * [adx.control.api.Databases.databasesGet](#adxcontrolapidatabasesdatabasesget) + * [adx.control.api.Databases.databasesListByCluster](#adxcontrolapidatabasesdatabaseslistbycluster) + * [adx.control.api.Databases.databasesListPrincipals](#adxcontrolapidatabasesdatabaseslistprincipals) + * [adx.control.api.Databases.databasesRemovePrincipals](#adxcontrolapidatabasesdatabasesremoveprincipals) + * [adx.control.api.Databases.databasesUpdate](#adxcontrolapidatabasesdatabasesupdate) + * [adx.control.api.Default](#adxcontrolapidefault) + * [adx.control.api.Default.Default](#adxcontrolapidefaultdefault) + * [adx.control.api.Default.clustersListSkus](#adxcontrolapidefaultclusterslistskus) + * [adx.control.api.Default.skusList](#adxcontrolapidefaultskuslist) + * [adx.control.api.ManagedPrivateEndpoints](#adxcontrolapimanagedprivateendpoints) + * [adx.control.api.ManagedPrivateEndpoints.ManagedPrivateEndpoints](#adxcontrolapimanagedprivateendpointsmanagedprivateendpoints) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCheckNameAvailability](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointschecknameavailability) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCreateOrUpdate](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointscreateorupdate) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsDelete](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsdelete) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsGet](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsget) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsList](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointslist) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsUpdate](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsupdate) + * [adx.control.api.OperationResults](#adxcontrolapioperationresults) + * [adx.control.api.OperationResults.OperationResults](#adxcontrolapioperationresultsoperationresults) + * [adx.control.api.OperationResults.operationsResultsGet](#adxcontrolapioperationresultsoperationsresultsget) + * [adx.control.api.Operations](#adxcontrolapioperations) + * [adx.control.api.Operations.Operations](#adxcontrolapioperationsoperations) + * [adx.control.api.Operations.operationsList](#adxcontrolapioperationsoperationslist) + * [adx.control.api.OutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpoints) + * [adx.control.api.OutboundNetworkDependenciesEndpoints.OutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpointsoutboundnetworkdependenciesendpoints) + * [adx.control.api.OutboundNetworkDependenciesEndpoints.clustersListOutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpointsclusterslistoutboundnetworkdependenciesendpoints) + * [adx.control.api.PrivateEndpointConnections](#adxcontrolapiprivateendpointconnections) + * [adx.control.api.PrivateEndpointConnections.PrivateEndpointConnections](#adxcontrolapiprivateendpointconnectionsprivateendpointconnections) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsCreateOrUpdate](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionscreateorupdate) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsDelete](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionsdelete) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsGet](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionsget) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsList](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionslist) + * [adx.control.api.PrivateLinkResources](#adxcontrolapiprivatelinkresources) + * [adx.control.api.PrivateLinkResources.PrivateLinkResources](#adxcontrolapiprivatelinkresourcesprivatelinkresources) + * [adx.control.api.PrivateLinkResources.privateLinkResourcesGet](#adxcontrolapiprivatelinkresourcesprivatelinkresourcesget) + * [adx.control.api.PrivateLinkResources.privateLinkResourcesList](#adxcontrolapiprivatelinkresourcesprivatelinkresourceslist) + * [adx.control.api.Scripts](#adxcontrolapiscripts) + * [adx.control.api.Scripts.Scripts](#adxcontrolapiscriptsscripts) + * [adx.control.api.Scripts.scriptsListByDatabase](#adxcontrolapiscriptsscriptslistbydatabase) + * [adx.control.models](#adxcontrolmodels) + * [adx.control.models.AcceptedAudiences](#adxcontrolmodelsacceptedaudiences) + * [adx.control.models.AcceptedAudiences.AcceptedAudiences](#adxcontrolmodelsacceptedaudiencesacceptedaudiences) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0000) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0000attacheddatabaseconfidefaultprincipalsmodificationkindenum_0000) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0001) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0001attacheddatabaseconfidefaultprincipalsmodificationkindenum_0001) + * [adx.control.models.AttachedDatabaseConfiguration](#adxcontrolmodelsattacheddatabaseconfiguration) + * [adx.control.models.AttachedDatabaseConfiguration.AttachedDatabaseConfiguration](#adxcontrolmodelsattacheddatabaseconfigurationattacheddatabaseconfiguration) + * [adx.control.models.AttachedDatabaseConfigurationListResult](#adxcontrolmodelsattacheddatabaseconfigurationlistresult) + * [adx.control.models.AttachedDatabaseConfigurationListResult.AttachedDatabaseConfigurationListResult](#adxcontrolmodelsattacheddatabaseconfigurationlistresultattacheddatabaseconfigurationlistresult) + * [adx.control.models.AttachedDatabaseConfigurationProperties](#adxcontrolmodelsattacheddatabaseconfigurationproperties) + * [adx.control.models.AttachedDatabaseConfigurationProperties.AttachedDatabaseConfigurationProperties](#adxcontrolmodelsattacheddatabaseconfigurationpropertiesattacheddatabaseconfigurationproperties) + * [adx.control.models.AttachedDatabaseConfigurationProperties_1](#adxcontrolmodelsattacheddatabaseconfigurationproperties_1) + * [adx.control.models.AttachedDatabaseConfigurationProperties_1.AttachedDatabaseConfigurationProperties_1](#adxcontrolmodelsattacheddatabaseconfigurationproperties_1attacheddatabaseconfigurationproperties_1) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequest) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest.AttachedDatabaseConfigurationsCheckNameRequest](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequestattacheddatabaseconfigurationschecknamerequest) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequesttypeenum) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequesttypeenumattacheddatabaseconfigurationschecknamerequesttypeenum) + * [adx.control.models.AzureCapacity](#adxcontrolmodelsazurecapacity) + * [adx.control.models.AzureCapacity.AzureCapacity](#adxcontrolmodelsazurecapacityazurecapacity) + * [adx.control.models.AzureCapacityScaleTypeEnum](#adxcontrolmodelsazurecapacityscaletypeenum) + * [adx.control.models.AzureCapacityScaleTypeEnum.AzureCapacityScaleTypeEnum](#adxcontrolmodelsazurecapacityscaletypeenumazurecapacityscaletypeenum) + * [adx.control.models.AzureResourceSku](#adxcontrolmodelsazureresourcesku) + * [adx.control.models.AzureResourceSku.AzureResourceSku](#adxcontrolmodelsazureresourceskuazureresourcesku) + * [adx.control.models.AzureResourceSku_1](#adxcontrolmodelsazureresourcesku_1) + * [adx.control.models.AzureResourceSku_1.AzureResourceSku_1](#adxcontrolmodelsazureresourcesku_1azureresourcesku_1) + * [adx.control.models.AzureSku](#adxcontrolmodelsazuresku) + * [adx.control.models.AzureSku.AzureSku](#adxcontrolmodelsazureskuazuresku) + * [adx.control.models.AzureSkuNameEnum](#adxcontrolmodelsazureskunameenum) + * [adx.control.models.AzureSkuNameEnum.AzureSkuNameEnum](#adxcontrolmodelsazureskunameenumazureskunameenum) + * [adx.control.models.AzureSkuTierEnum](#adxcontrolmodelsazureskutierenum) + * [adx.control.models.AzureSkuTierEnum.AzureSkuTierEnum](#adxcontrolmodelsazureskutierenumazureskutierenum) + * [adx.control.models.BlobStorageEventType](#adxcontrolmodelsblobstorageeventtype) + * [adx.control.models.BlobStorageEventType.BlobStorageEventType](#adxcontrolmodelsblobstorageeventtypeblobstorageeventtype) + * [adx.control.models.CheckNameRequest](#adxcontrolmodelschecknamerequest) + * [adx.control.models.CheckNameRequest.CheckNameRequest](#adxcontrolmodelschecknamerequestchecknamerequest) + * [adx.control.models.CheckNameRequestTypeEnum](#adxcontrolmodelschecknamerequesttypeenum) + * [adx.control.models.CheckNameRequestTypeEnum.CheckNameRequestTypeEnum](#adxcontrolmodelschecknamerequesttypeenumchecknamerequesttypeenum) + * [adx.control.models.CheckNameResult](#adxcontrolmodelschecknameresult) + * [adx.control.models.CheckNameResult.CheckNameResult](#adxcontrolmodelschecknameresultchecknameresult) + * [adx.control.models.CheckNameResultReasonEnum](#adxcontrolmodelschecknameresultreasonenum) + * [adx.control.models.CheckNameResultReasonEnum.CheckNameResultReasonEnum](#adxcontrolmodelschecknameresultreasonenumchecknameresultreasonenum) + * [adx.control.models.Cluster](#adxcontrolmodelscluster) + * [adx.control.models.Cluster.Cluster](#adxcontrolmodelsclustercluster) + * [adx.control.models.ClusterCheckNameRequest](#adxcontrolmodelsclusterchecknamerequest) + * [adx.control.models.ClusterCheckNameRequest.ClusterCheckNameRequest](#adxcontrolmodelsclusterchecknamerequestclusterchecknamerequest) + * [adx.control.models.ClusterCheckNameRequestTypeEnum](#adxcontrolmodelsclusterchecknamerequesttypeenum) + * [adx.control.models.ClusterCheckNameRequestTypeEnum.ClusterCheckNameRequestTypeEnum](#adxcontrolmodelsclusterchecknamerequesttypeenumclusterchecknamerequesttypeenum) + * [adx.control.models.ClusterListResult](#adxcontrolmodelsclusterlistresult) + * [adx.control.models.ClusterListResult.ClusterListResult](#adxcontrolmodelsclusterlistresultclusterlistresult) + * [adx.control.models.ClusterMigrateRequest](#adxcontrolmodelsclustermigraterequest) + * [adx.control.models.ClusterMigrateRequest.ClusterMigrateRequest](#adxcontrolmodelsclustermigraterequestclustermigraterequest) + * [adx.control.models.ClusterPrincipalAssignment](#adxcontrolmodelsclusterprincipalassignment) + * [adx.control.models.ClusterPrincipalAssignment.ClusterPrincipalAssignment](#adxcontrolmodelsclusterprincipalassignmentclusterprincipalassignment) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequest](#adxcontrolmodelsclusterprincipalassignmentchecknamerequest) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequest.ClusterPrincipalAssignmentCheckNameRequest](#adxcontrolmodelsclusterprincipalassignmentchecknamerequestclusterprincipalassignmentchecknamerequest) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsclusterprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum.ClusterPrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsclusterprincipalassignmentchecknamerequesttypeenumclusterprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.ClusterPrincipalAssignmentListResult](#adxcontrolmodelsclusterprincipalassignmentlistresult) + * [adx.control.models.ClusterPrincipalAssignmentListResult.ClusterPrincipalAssignmentListResult](#adxcontrolmodelsclusterprincipalassignmentlistresultclusterprincipalassignmentlistresult) + * [adx.control.models.ClusterPrincipalProperties](#adxcontrolmodelsclusterprincipalproperties) + * [adx.control.models.ClusterPrincipalProperties.ClusterPrincipalProperties](#adxcontrolmodelsclusterprincipalpropertiesclusterprincipalproperties) + * [adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsclusterprincipalpropertiesprincipaltypeenum) + * [adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum.ClusterPrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsclusterprincipalpropertiesprincipaltypeenumclusterprincipalpropertiesprincipaltypeenum) + * [adx.control.models.ClusterPrincipalPropertiesRoleEnum](#adxcontrolmodelsclusterprincipalpropertiesroleenum) + * [adx.control.models.ClusterPrincipalPropertiesRoleEnum.ClusterPrincipalPropertiesRoleEnum](#adxcontrolmodelsclusterprincipalpropertiesroleenumclusterprincipalpropertiesroleenum) + * [adx.control.models.ClusterPrincipalProperties_1](#adxcontrolmodelsclusterprincipalproperties_1) + * [adx.control.models.ClusterPrincipalProperties_1.ClusterPrincipalProperties_1](#adxcontrolmodelsclusterprincipalproperties_1clusterprincipalproperties_1) + * [adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsclusterprincipalproperties_1principaltypeenum) + * [adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum.ClusterPrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsclusterprincipalproperties_1principaltypeenumclusterprincipalproperties_1principaltypeenum) + * [adx.control.models.ClusterPrincipalProperties_1RoleEnum](#adxcontrolmodelsclusterprincipalproperties_1roleenum) + * [adx.control.models.ClusterPrincipalProperties_1RoleEnum.ClusterPrincipalProperties_1RoleEnum](#adxcontrolmodelsclusterprincipalproperties_1roleenumclusterprincipalproperties_1roleenum) + * [adx.control.models.ClusterProperties](#adxcontrolmodelsclusterproperties) + * [adx.control.models.ClusterProperties.ClusterProperties](#adxcontrolmodelsclusterpropertiesclusterproperties) + * [adx.control.models.ClusterPropertiesEngineTypeEnum](#adxcontrolmodelsclusterpropertiesenginetypeenum) + * [adx.control.models.ClusterPropertiesEngineTypeEnum.ClusterPropertiesEngineTypeEnum](#adxcontrolmodelsclusterpropertiesenginetypeenumclusterpropertiesenginetypeenum) + * [adx.control.models.ClusterPropertiesPublicIPTypeEnum](#adxcontrolmodelsclusterpropertiespubliciptypeenum) + * [adx.control.models.ClusterPropertiesPublicIPTypeEnum.ClusterPropertiesPublicIPTypeEnum](#adxcontrolmodelsclusterpropertiespubliciptypeenumclusterpropertiespubliciptypeenum) + * [adx.control.models.ClusterPropertiesPublicNetworkAccessEnum](#adxcontrolmodelsclusterpropertiespublicnetworkaccessenum) + * [adx.control.models.ClusterPropertiesPublicNetworkAccessEnum.ClusterPropertiesPublicNetworkAccessEnum](#adxcontrolmodelsclusterpropertiespublicnetworkaccessenumclusterpropertiespublicnetworkaccessenum) + * [adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterpropertiesrestrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum.ClusterPropertiesRestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterpropertiesrestrictoutboundnetworkaccessenumclusterpropertiesrestrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterPropertiesStateEnum](#adxcontrolmodelsclusterpropertiesstateenum) + * [adx.control.models.ClusterPropertiesStateEnum.ClusterPropertiesStateEnum](#adxcontrolmodelsclusterpropertiesstateenumclusterpropertiesstateenum) + * [adx.control.models.ClusterProperties_1](#adxcontrolmodelsclusterproperties_1) + * [adx.control.models.ClusterProperties_1.ClusterProperties_1](#adxcontrolmodelsclusterproperties_1clusterproperties_1) + * [adx.control.models.ClusterProperties_1EngineTypeEnum](#adxcontrolmodelsclusterproperties_1enginetypeenum) + * [adx.control.models.ClusterProperties_1EngineTypeEnum.ClusterProperties_1EngineTypeEnum](#adxcontrolmodelsclusterproperties_1enginetypeenumclusterproperties_1enginetypeenum) + * [adx.control.models.ClusterProperties_1PublicIPTypeEnum](#adxcontrolmodelsclusterproperties_1publiciptypeenum) + * [adx.control.models.ClusterProperties_1PublicIPTypeEnum.ClusterProperties_1PublicIPTypeEnum](#adxcontrolmodelsclusterproperties_1publiciptypeenumclusterproperties_1publiciptypeenum) + * [adx.control.models.ClusterProperties_1PublicNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1publicnetworkaccessenum) + * [adx.control.models.ClusterProperties_1PublicNetworkAccessEnum.ClusterProperties_1PublicNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1publicnetworkaccessenumclusterproperties_1publicnetworkaccessenum) + * [adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1restrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum.ClusterProperties_1RestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1restrictoutboundnetworkaccessenumclusterproperties_1restrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterProperties_1StateEnum](#adxcontrolmodelsclusterproperties_1stateenum) + * [adx.control.models.ClusterProperties_1StateEnum.ClusterProperties_1StateEnum](#adxcontrolmodelsclusterproperties_1stateenumclusterproperties_1stateenum) + * [adx.control.models.ClusterUpdate](#adxcontrolmodelsclusterupdate) + * [adx.control.models.ClusterUpdate.ClusterUpdate](#adxcontrolmodelsclusterupdateclusterupdate) + * [adx.control.models.Compression](#adxcontrolmodelscompression) + * [adx.control.models.Compression.Compression](#adxcontrolmodelscompressioncompression) + * [adx.control.models.CosmosDbDataConnection](#adxcontrolmodelscosmosdbdataconnection) + * [adx.control.models.CosmosDbDataConnection.CosmosDbDataConnection](#adxcontrolmodelscosmosdbdataconnectioncosmosdbdataconnection) + * [adx.control.models.CosmosDbDataConnectionProperties](#adxcontrolmodelscosmosdbdataconnectionproperties) + * [adx.control.models.CosmosDbDataConnectionProperties.CosmosDbDataConnectionProperties](#adxcontrolmodelscosmosdbdataconnectionpropertiescosmosdbdataconnectionproperties) + * [adx.control.models.CosmosDbDataConnectionProperties_1](#adxcontrolmodelscosmosdbdataconnectionproperties_1) + * [adx.control.models.CosmosDbDataConnectionProperties_1.CosmosDbDataConnectionProperties_1](#adxcontrolmodelscosmosdbdataconnectionproperties_1cosmosdbdataconnectionproperties_1) + * [adx.control.models.DataConnection](#adxcontrolmodelsdataconnection) + * [adx.control.models.DataConnection.DataConnection](#adxcontrolmodelsdataconnectiondataconnection) + * [adx.control.models.DataConnectionCheckNameRequest](#adxcontrolmodelsdataconnectionchecknamerequest) + * [adx.control.models.DataConnectionCheckNameRequest.DataConnectionCheckNameRequest](#adxcontrolmodelsdataconnectionchecknamerequestdataconnectionchecknamerequest) + * [adx.control.models.DataConnectionCheckNameRequestTypeEnum](#adxcontrolmodelsdataconnectionchecknamerequesttypeenum) + * [adx.control.models.DataConnectionCheckNameRequestTypeEnum.DataConnectionCheckNameRequestTypeEnum](#adxcontrolmodelsdataconnectionchecknamerequesttypeenumdataconnectionchecknamerequesttypeenum) + * [adx.control.models.DataConnectionKindEnum](#adxcontrolmodelsdataconnectionkindenum) + * [adx.control.models.DataConnectionKindEnum.DataConnectionKindEnum](#adxcontrolmodelsdataconnectionkindenumdataconnectionkindenum) + * [adx.control.models.DataConnectionListResult](#adxcontrolmodelsdataconnectionlistresult) + * [adx.control.models.DataConnectionListResult.DataConnectionListResult](#adxcontrolmodelsdataconnectionlistresultdataconnectionlistresult) + * [adx.control.models.DataConnectionValidation](#adxcontrolmodelsdataconnectionvalidation) + * [adx.control.models.DataConnectionValidation.DataConnectionValidation](#adxcontrolmodelsdataconnectionvalidationdataconnectionvalidation) + * [adx.control.models.DataConnectionValidationListResult](#adxcontrolmodelsdataconnectionvalidationlistresult) + * [adx.control.models.DataConnectionValidationListResult.DataConnectionValidationListResult](#adxcontrolmodelsdataconnectionvalidationlistresultdataconnectionvalidationlistresult) + * [adx.control.models.DataConnectionValidationResult](#adxcontrolmodelsdataconnectionvalidationresult) + * [adx.control.models.DataConnectionValidationResult.DataConnectionValidationResult](#adxcontrolmodelsdataconnectionvalidationresultdataconnectionvalidationresult) + * [adx.control.models.Database](#adxcontrolmodelsdatabase) + * [adx.control.models.Database.Database](#adxcontrolmodelsdatabasedatabase) + * [adx.control.models.DatabaseInviteFollowerRequest](#adxcontrolmodelsdatabaseinvitefollowerrequest) + * [adx.control.models.DatabaseInviteFollowerRequest.DatabaseInviteFollowerRequest](#adxcontrolmodelsdatabaseinvitefollowerrequestdatabaseinvitefollowerrequest) + * [adx.control.models.DatabaseInviteFollowerResult](#adxcontrolmodelsdatabaseinvitefollowerresult) + * [adx.control.models.DatabaseInviteFollowerResult.DatabaseInviteFollowerResult](#adxcontrolmodelsdatabaseinvitefollowerresultdatabaseinvitefollowerresult) + * [adx.control.models.DatabaseKindEnum](#adxcontrolmodelsdatabasekindenum) + * [adx.control.models.DatabaseKindEnum.DatabaseKindEnum](#adxcontrolmodelsdatabasekindenumdatabasekindenum) + * [adx.control.models.DatabaseListResult](#adxcontrolmodelsdatabaselistresult) + * [adx.control.models.DatabaseListResult.DatabaseListResult](#adxcontrolmodelsdatabaselistresultdatabaselistresult) + * [adx.control.models.DatabasePrincipal](#adxcontrolmodelsdatabaseprincipal) + * [adx.control.models.DatabasePrincipal.DatabasePrincipal](#adxcontrolmodelsdatabaseprincipaldatabaseprincipal) + * [adx.control.models.DatabasePrincipalAssignment](#adxcontrolmodelsdatabaseprincipalassignment) + * [adx.control.models.DatabasePrincipalAssignment.DatabasePrincipalAssignment](#adxcontrolmodelsdatabaseprincipalassignmentdatabaseprincipalassignment) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequest](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequest) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequest.DatabasePrincipalAssignmentCheckNameRequest](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequestdatabaseprincipalassignmentchecknamerequest) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum.DatabasePrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequesttypeenumdatabaseprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.DatabasePrincipalAssignmentListResult](#adxcontrolmodelsdatabaseprincipalassignmentlistresult) + * [adx.control.models.DatabasePrincipalAssignmentListResult.DatabasePrincipalAssignmentListResult](#adxcontrolmodelsdatabaseprincipalassignmentlistresultdatabaseprincipalassignmentlistresult) + * [adx.control.models.DatabasePrincipalListRequest](#adxcontrolmodelsdatabaseprincipallistrequest) + * [adx.control.models.DatabasePrincipalListRequest.DatabasePrincipalListRequest](#adxcontrolmodelsdatabaseprincipallistrequestdatabaseprincipallistrequest) + * [adx.control.models.DatabasePrincipalListResult](#adxcontrolmodelsdatabaseprincipallistresult) + * [adx.control.models.DatabasePrincipalListResult.DatabasePrincipalListResult](#adxcontrolmodelsdatabaseprincipallistresultdatabaseprincipallistresult) + * [adx.control.models.DatabasePrincipalProperties](#adxcontrolmodelsdatabaseprincipalproperties) + * [adx.control.models.DatabasePrincipalProperties.DatabasePrincipalProperties](#adxcontrolmodelsdatabaseprincipalpropertiesdatabaseprincipalproperties) + * [adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalpropertiesprincipaltypeenum) + * [adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum.DatabasePrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalpropertiesprincipaltypeenumdatabaseprincipalpropertiesprincipaltypeenum) + * [adx.control.models.DatabasePrincipalPropertiesRoleEnum](#adxcontrolmodelsdatabaseprincipalpropertiesroleenum) + * [adx.control.models.DatabasePrincipalPropertiesRoleEnum.DatabasePrincipalPropertiesRoleEnum](#adxcontrolmodelsdatabaseprincipalpropertiesroleenumdatabaseprincipalpropertiesroleenum) + * [adx.control.models.DatabasePrincipalProperties_1](#adxcontrolmodelsdatabaseprincipalproperties_1) + * [adx.control.models.DatabasePrincipalProperties_1.DatabasePrincipalProperties_1](#adxcontrolmodelsdatabaseprincipalproperties_1databaseprincipalproperties_1) + * [adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalproperties_1principaltypeenum) + * [adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum.DatabasePrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalproperties_1principaltypeenumdatabaseprincipalproperties_1principaltypeenum) + * [adx.control.models.DatabasePrincipalProperties_1RoleEnum](#adxcontrolmodelsdatabaseprincipalproperties_1roleenum) + * [adx.control.models.DatabasePrincipalProperties_1RoleEnum.DatabasePrincipalProperties_1RoleEnum](#adxcontrolmodelsdatabaseprincipalproperties_1roleenumdatabaseprincipalproperties_1roleenum) + * [adx.control.models.DatabasePrincipalRoleEnum](#adxcontrolmodelsdatabaseprincipalroleenum) + * [adx.control.models.DatabasePrincipalRoleEnum.DatabasePrincipalRoleEnum](#adxcontrolmodelsdatabaseprincipalroleenumdatabaseprincipalroleenum) + * [adx.control.models.DatabasePrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipaltypeenum) + * [adx.control.models.DatabasePrincipalTypeEnum.DatabasePrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipaltypeenumdatabaseprincipaltypeenum) + * [adx.control.models.DatabaseShareOrigin](#adxcontrolmodelsdatabaseshareorigin) + * [adx.control.models.DatabaseShareOrigin.DatabaseShareOrigin](#adxcontrolmodelsdatabaseshareorigindatabaseshareorigin) + * [adx.control.models.DatabaseStatistics](#adxcontrolmodelsdatabasestatistics) + * [adx.control.models.DatabaseStatistics.DatabaseStatistics](#adxcontrolmodelsdatabasestatisticsdatabasestatistics) + * [adx.control.models.DiagnoseVirtualNetworkResult](#adxcontrolmodelsdiagnosevirtualnetworkresult) + * [adx.control.models.DiagnoseVirtualNetworkResult.DiagnoseVirtualNetworkResult](#adxcontrolmodelsdiagnosevirtualnetworkresultdiagnosevirtualnetworkresult) + * [adx.control.models.EndpointDependency](#adxcontrolmodelsendpointdependency) + * [adx.control.models.EndpointDependency.EndpointDependency](#adxcontrolmodelsendpointdependencyendpointdependency) + * [adx.control.models.EndpointDetail](#adxcontrolmodelsendpointdetail) + * [adx.control.models.EndpointDetail.EndpointDetail](#adxcontrolmodelsendpointdetailendpointdetail) + * [adx.control.models.ErrorAdditionalInfo](#adxcontrolmodelserroradditionalinfo) + * [adx.control.models.ErrorAdditionalInfo.ErrorAdditionalInfo](#adxcontrolmodelserroradditionalinfoerroradditionalinfo) + * [adx.control.models.ErrorAdditionalInfo.disp](#adxcontrolmodelserroradditionalinfodisp) + * [adx.control.models.ErrorDetail](#adxcontrolmodelserrordetail) + * [adx.control.models.ErrorDetail.ErrorDetail](#adxcontrolmodelserrordetailerrordetail) + * [adx.control.models.ErrorDetail.disp](#adxcontrolmodelserrordetaildisp) + * [adx.control.models.ErrorResponse](#adxcontrolmodelserrorresponse) + * [adx.control.models.ErrorResponse.ErrorResponse](#adxcontrolmodelserrorresponseerrorresponse) + * [adx.control.models.ErrorResponse.disp](#adxcontrolmodelserrorresponsedisp) + * [adx.control.models.EventGridConnectionProperties](#adxcontrolmodelseventgridconnectionproperties) + * [adx.control.models.EventGridConnectionProperties.EventGridConnectionProperties](#adxcontrolmodelseventgridconnectionpropertieseventgridconnectionproperties) + * [adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum.EventGridConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionpropertiesdatabaseroutingenumeventgridconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventGridConnectionProperties_1](#adxcontrolmodelseventgridconnectionproperties_1) + * [adx.control.models.EventGridConnectionProperties_1.EventGridConnectionProperties_1](#adxcontrolmodelseventgridconnectionproperties_1eventgridconnectionproperties_1) + * [adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum.EventGridConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionproperties_1databaseroutingenumeventgridconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventGridDataConnection](#adxcontrolmodelseventgriddataconnection) + * [adx.control.models.EventGridDataConnection.EventGridDataConnection](#adxcontrolmodelseventgriddataconnectioneventgriddataconnection) + * [adx.control.models.EventGridDataFormat](#adxcontrolmodelseventgriddataformat) + * [adx.control.models.EventGridDataFormat.EventGridDataFormat](#adxcontrolmodelseventgriddataformateventgriddataformat) + * [adx.control.models.EventHubConnectionProperties](#adxcontrolmodelseventhubconnectionproperties) + * [adx.control.models.EventHubConnectionProperties.EventHubConnectionProperties](#adxcontrolmodelseventhubconnectionpropertieseventhubconnectionproperties) + * [adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum.EventHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionpropertiesdatabaseroutingenumeventhubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventHubConnectionProperties_1](#adxcontrolmodelseventhubconnectionproperties_1) + * [adx.control.models.EventHubConnectionProperties_1.EventHubConnectionProperties_1](#adxcontrolmodelseventhubconnectionproperties_1eventhubconnectionproperties_1) + * [adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum.EventHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionproperties_1databaseroutingenumeventhubconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventHubDataConnection](#adxcontrolmodelseventhubdataconnection) + * [adx.control.models.EventHubDataConnection.EventHubDataConnection](#adxcontrolmodelseventhubdataconnectioneventhubdataconnection) + * [adx.control.models.EventHubDataFormat](#adxcontrolmodelseventhubdataformat) + * [adx.control.models.EventHubDataFormat.EventHubDataFormat](#adxcontrolmodelseventhubdataformateventhubdataformat) + * [adx.control.models.FollowerDatabaseDefinition](#adxcontrolmodelsfollowerdatabasedefinition) + * [adx.control.models.FollowerDatabaseDefinition.FollowerDatabaseDefinition](#adxcontrolmodelsfollowerdatabasedefinitionfollowerdatabasedefinition) + * [adx.control.models.FollowerDatabaseListResult](#adxcontrolmodelsfollowerdatabaselistresult) + * [adx.control.models.FollowerDatabaseListResult.FollowerDatabaseListResult](#adxcontrolmodelsfollowerdatabaselistresultfollowerdatabaselistresult) + * [adx.control.models.FreeFormObject](#adxcontrolmodelsfreeformobject) + * [adx.control.models.FreeFormObject.FreeFormObject](#adxcontrolmodelsfreeformobjectfreeformobject) + * [adx.control.models.Identity](#adxcontrolmodelsidentity) + * [adx.control.models.Identity.Identity](#adxcontrolmodelsidentityidentity) + * [adx.control.models.IdentityTypeEnum](#adxcontrolmodelsidentitytypeenum) + * [adx.control.models.IdentityTypeEnum.IdentityTypeEnum](#adxcontrolmodelsidentitytypeenumidentitytypeenum) + * [adx.control.models.Identity_userAssignedIdentities_value](#adxcontrolmodelsidentity_userassignedidentities_value) + * [adx.control.models.Identity_userAssignedIdentities_value.Identity_userAssignedIdentities_value](#adxcontrolmodelsidentity_userassignedidentities_valueidentity_userassignedidentities_value) + * [adx.control.models.IotHubConnectionProperties](#adxcontrolmodelsiothubconnectionproperties) + * [adx.control.models.IotHubConnectionProperties.IotHubConnectionProperties](#adxcontrolmodelsiothubconnectionpropertiesiothubconnectionproperties) + * [adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum.IotHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionpropertiesdatabaseroutingenumiothubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.IotHubConnectionProperties_1](#adxcontrolmodelsiothubconnectionproperties_1) + * [adx.control.models.IotHubConnectionProperties_1.IotHubConnectionProperties_1](#adxcontrolmodelsiothubconnectionproperties_1iothubconnectionproperties_1) + * [adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionproperties_1databaseroutingenum) + * [adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum.IotHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionproperties_1databaseroutingenumiothubconnectionproperties_1databaseroutingenum) + * [adx.control.models.IotHubDataConnection](#adxcontrolmodelsiothubdataconnection) + * [adx.control.models.IotHubDataConnection.IotHubDataConnection](#adxcontrolmodelsiothubdataconnectioniothubdataconnection) + * [adx.control.models.IotHubDataFormat](#adxcontrolmodelsiothubdataformat) + * [adx.control.models.IotHubDataFormat.IotHubDataFormat](#adxcontrolmodelsiothubdataformatiothubdataformat) + * [adx.control.models.KeyVaultProperties](#adxcontrolmodelskeyvaultproperties) + * [adx.control.models.KeyVaultProperties.KeyVaultProperties](#adxcontrolmodelskeyvaultpropertieskeyvaultproperties) + * [adx.control.models.LanguageExtension](#adxcontrolmodelslanguageextension) + * [adx.control.models.LanguageExtension.LanguageExtension](#adxcontrolmodelslanguageextensionlanguageextension) + * [adx.control.models.LanguageExtensionImageName](#adxcontrolmodelslanguageextensionimagename) + * [adx.control.models.LanguageExtensionImageName.LanguageExtensionImageName](#adxcontrolmodelslanguageextensionimagenamelanguageextensionimagename) + * [adx.control.models.LanguageExtensionName](#adxcontrolmodelslanguageextensionname) + * [adx.control.models.LanguageExtensionName.LanguageExtensionName](#adxcontrolmodelslanguageextensionnamelanguageextensionname) + * [adx.control.models.LanguageExtension_1](#adxcontrolmodelslanguageextension_1) + * [adx.control.models.LanguageExtension_1.LanguageExtension_1](#adxcontrolmodelslanguageextension_1languageextension_1) + * [adx.control.models.LanguageExtensionsList](#adxcontrolmodelslanguageextensionslist) + * [adx.control.models.LanguageExtensionsList.LanguageExtensionsList](#adxcontrolmodelslanguageextensionslistlanguageextensionslist) + * [adx.control.models.ListResourceSkusResult](#adxcontrolmodelslistresourceskusresult) + * [adx.control.models.ListResourceSkusResult.ListResourceSkusResult](#adxcontrolmodelslistresourceskusresultlistresourceskusresult) + * [adx.control.models.ManagedPrivateEndpoint](#adxcontrolmodelsmanagedprivateendpoint) + * [adx.control.models.ManagedPrivateEndpoint.ManagedPrivateEndpoint](#adxcontrolmodelsmanagedprivateendpointmanagedprivateendpoint) + * [adx.control.models.ManagedPrivateEndpointListResult](#adxcontrolmodelsmanagedprivateendpointlistresult) + * [adx.control.models.ManagedPrivateEndpointListResult.ManagedPrivateEndpointListResult](#adxcontrolmodelsmanagedprivateendpointlistresultmanagedprivateendpointlistresult) + * [adx.control.models.ManagedPrivateEndpointProperties](#adxcontrolmodelsmanagedprivateendpointproperties) + * [adx.control.models.ManagedPrivateEndpointProperties.ManagedPrivateEndpointProperties](#adxcontrolmodelsmanagedprivateendpointpropertiesmanagedprivateendpointproperties) + * [adx.control.models.ManagedPrivateEndpointProperties_1](#adxcontrolmodelsmanagedprivateendpointproperties_1) + * [adx.control.models.ManagedPrivateEndpointProperties_1.ManagedPrivateEndpointProperties_1](#adxcontrolmodelsmanagedprivateendpointproperties_1managedprivateendpointproperties_1) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequest](#adxcontrolmodelsmanagedprivateendpointschecknamerequest) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequest.ManagedPrivateEndpointsCheckNameRequest](#adxcontrolmodelsmanagedprivateendpointschecknamerequestmanagedprivateendpointschecknamerequest) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum](#adxcontrolmodelsmanagedprivateendpointschecknamerequesttypeenum) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum.ManagedPrivateEndpointsCheckNameRequestTypeEnum](#adxcontrolmodelsmanagedprivateendpointschecknamerequesttypeenummanagedprivateendpointschecknamerequesttypeenum) + * [adx.control.models.MigrationClusterProperties](#adxcontrolmodelsmigrationclusterproperties) + * [adx.control.models.MigrationClusterProperties.MigrationClusterProperties](#adxcontrolmodelsmigrationclusterpropertiesmigrationclusterproperties) + * [adx.control.models.MigrationClusterPropertiesRoleEnum](#adxcontrolmodelsmigrationclusterpropertiesroleenum) + * [adx.control.models.MigrationClusterPropertiesRoleEnum.MigrationClusterPropertiesRoleEnum](#adxcontrolmodelsmigrationclusterpropertiesroleenummigrationclusterpropertiesroleenum) + * [adx.control.models.Operation](#adxcontrolmodelsoperation) + * [adx.control.models.Operation.Operation](#adxcontrolmodelsoperationoperation) + * [adx.control.models.OperationListResult](#adxcontrolmodelsoperationlistresult) + * [adx.control.models.OperationListResult.OperationListResult](#adxcontrolmodelsoperationlistresultoperationlistresult) + * [adx.control.models.OperationResult](#adxcontrolmodelsoperationresult) + * [adx.control.models.OperationResult.OperationResult](#adxcontrolmodelsoperationresultoperationresult) + * [adx.control.models.OperationResultErrorProperties](#adxcontrolmodelsoperationresulterrorproperties) + * [adx.control.models.OperationResultErrorProperties.OperationResultErrorProperties](#adxcontrolmodelsoperationresulterrorpropertiesoperationresulterrorproperties) + * [adx.control.models.OperationResultProperties](#adxcontrolmodelsoperationresultproperties) + * [adx.control.models.OperationResultProperties.OperationResultProperties](#adxcontrolmodelsoperationresultpropertiesoperationresultproperties) + * [adx.control.models.OptimizedAutoscale](#adxcontrolmodelsoptimizedautoscale) + * [adx.control.models.OptimizedAutoscale.OptimizedAutoscale](#adxcontrolmodelsoptimizedautoscaleoptimizedautoscale) + * [adx.control.models.OutboundNetworkDependenciesEndpoint](#adxcontrolmodelsoutboundnetworkdependenciesendpoint) + * [adx.control.models.OutboundNetworkDependenciesEndpoint.OutboundNetworkDependenciesEndpoint](#adxcontrolmodelsoutboundnetworkdependenciesendpointoutboundnetworkdependenciesendpoint) + * [adx.control.models.OutboundNetworkDependenciesEndpointListResult](#adxcontrolmodelsoutboundnetworkdependenciesendpointlistresult) + * [adx.control.models.OutboundNetworkDependenciesEndpointListResult.OutboundNetworkDependenciesEndpointListResult](#adxcontrolmodelsoutboundnetworkdependenciesendpointlistresultoutboundnetworkdependenciesendpointlistresult) + * [adx.control.models.OutboundNetworkDependenciesEndpointProperties](#adxcontrolmodelsoutboundnetworkdependenciesendpointproperties) + * [adx.control.models.OutboundNetworkDependenciesEndpointProperties.OutboundNetworkDependenciesEndpointProperties](#adxcontrolmodelsoutboundnetworkdependenciesendpointpropertiesoutboundnetworkdependenciesendpointproperties) + * [adx.control.models.PrivateEndpointConnection](#adxcontrolmodelsprivateendpointconnection) + * [adx.control.models.PrivateEndpointConnection.PrivateEndpointConnection](#adxcontrolmodelsprivateendpointconnectionprivateendpointconnection) + * [adx.control.models.PrivateEndpointConnectionListResult](#adxcontrolmodelsprivateendpointconnectionlistresult) + * [adx.control.models.PrivateEndpointConnectionListResult.PrivateEndpointConnectionListResult](#adxcontrolmodelsprivateendpointconnectionlistresultprivateendpointconnectionlistresult) + * [adx.control.models.PrivateEndpointConnectionProperties](#adxcontrolmodelsprivateendpointconnectionproperties) + * [adx.control.models.PrivateEndpointConnectionProperties.PrivateEndpointConnectionProperties](#adxcontrolmodelsprivateendpointconnectionpropertiesprivateendpointconnectionproperties) + * [adx.control.models.PrivateEndpointProperty](#adxcontrolmodelsprivateendpointproperty) + * [adx.control.models.PrivateEndpointProperty.PrivateEndpointProperty](#adxcontrolmodelsprivateendpointpropertyprivateendpointproperty) + * [adx.control.models.PrivateLinkResource](#adxcontrolmodelsprivatelinkresource) + * [adx.control.models.PrivateLinkResource.PrivateLinkResource](#adxcontrolmodelsprivatelinkresourceprivatelinkresource) + * [adx.control.models.PrivateLinkResourceListResult](#adxcontrolmodelsprivatelinkresourcelistresult) + * [adx.control.models.PrivateLinkResourceListResult.PrivateLinkResourceListResult](#adxcontrolmodelsprivatelinkresourcelistresultprivatelinkresourcelistresult) + * [adx.control.models.PrivateLinkResourceProperties](#adxcontrolmodelsprivatelinkresourceproperties) + * [adx.control.models.PrivateLinkResourceProperties.PrivateLinkResourceProperties](#adxcontrolmodelsprivatelinkresourcepropertiesprivatelinkresourceproperties) + * [adx.control.models.PrivateLinkServiceConnectionStateProperty](#adxcontrolmodelsprivatelinkserviceconnectionstateproperty) + * [adx.control.models.PrivateLinkServiceConnectionStateProperty.PrivateLinkServiceConnectionStateProperty](#adxcontrolmodelsprivatelinkserviceconnectionstatepropertyprivatelinkserviceconnectionstateproperty) + * [adx.control.models.ProvisioningState](#adxcontrolmodelsprovisioningstate) + * [adx.control.models.ProvisioningState.ProvisioningState](#adxcontrolmodelsprovisioningstateprovisioningstate) + * [adx.control.models.ProxyResource](#adxcontrolmodelsproxyresource) + * [adx.control.models.ProxyResource.ProxyResource](#adxcontrolmodelsproxyresourceproxyresource) + * [adx.control.models.ReadOnlyFollowingDatabase](#adxcontrolmodelsreadonlyfollowingdatabase) + * [adx.control.models.ReadOnlyFollowingDatabase.ReadOnlyFollowingDatabase](#adxcontrolmodelsreadonlyfollowingdatabasereadonlyfollowingdatabase) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0000) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0000readonlyfollowingdatabaseproprincipalsmodificationkindenum_0000) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0001) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0001readonlyfollowingdatabaseproprincipalsmodificationkindenum_0001) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties](#adxcontrolmodelsreadonlyfollowingdatabaseproperties) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties.ReadOnlyFollowingDatabaseProperties](#adxcontrolmodelsreadonlyfollowingdatabasepropertiesreadonlyfollowingdatabaseproperties) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties_1](#adxcontrolmodelsreadonlyfollowingdatabaseproperties_1) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties_1.ReadOnlyFollowingDatabaseProperties_1](#adxcontrolmodelsreadonlyfollowingdatabaseproperties_1readonlyfollowingdatabaseproperties_1) + * [adx.control.models.ReadWriteDatabase](#adxcontrolmodelsreadwritedatabase) + * [adx.control.models.ReadWriteDatabase.ReadWriteDatabase](#adxcontrolmodelsreadwritedatabasereadwritedatabase) + * [adx.control.models.ReadWriteDatabaseProperties](#adxcontrolmodelsreadwritedatabaseproperties) + * [adx.control.models.ReadWriteDatabaseProperties.ReadWriteDatabaseProperties](#adxcontrolmodelsreadwritedatabasepropertiesreadwritedatabaseproperties) + * [adx.control.models.ReadWriteDatabaseProperties_1](#adxcontrolmodelsreadwritedatabaseproperties_1) + * [adx.control.models.ReadWriteDatabaseProperties_1.ReadWriteDatabaseProperties_1](#adxcontrolmodelsreadwritedatabaseproperties_1readwritedatabaseproperties_1) + * [adx.control.models.Resource](#adxcontrolmodelsresource) + * [adx.control.models.Resource.Resource](#adxcontrolmodelsresourceresource) + * [adx.control.models.ResourceSkuCapabilities](#adxcontrolmodelsresourceskucapabilities) + * [adx.control.models.ResourceSkuCapabilities.ResourceSkuCapabilities](#adxcontrolmodelsresourceskucapabilitiesresourceskucapabilities) + * [adx.control.models.ResourceSkuZoneDetails](#adxcontrolmodelsresourceskuzonedetails) + * [adx.control.models.ResourceSkuZoneDetails.ResourceSkuZoneDetails](#adxcontrolmodelsresourceskuzonedetailsresourceskuzonedetails) + * [adx.control.models.Script](#adxcontrolmodelsscript) + * [adx.control.models.Script.Script](#adxcontrolmodelsscriptscript) + * [adx.control.models.ScriptCheckNameRequest](#adxcontrolmodelsscriptchecknamerequest) + * [adx.control.models.ScriptCheckNameRequest.ScriptCheckNameRequest](#adxcontrolmodelsscriptchecknamerequestscriptchecknamerequest) + * [adx.control.models.ScriptCheckNameRequestTypeEnum](#adxcontrolmodelsscriptchecknamerequesttypeenum) + * [adx.control.models.ScriptCheckNameRequestTypeEnum.ScriptCheckNameRequestTypeEnum](#adxcontrolmodelsscriptchecknamerequesttypeenumscriptchecknamerequesttypeenum) + * [adx.control.models.ScriptListResult](#adxcontrolmodelsscriptlistresult) + * [adx.control.models.ScriptListResult.ScriptListResult](#adxcontrolmodelsscriptlistresultscriptlistresult) + * [adx.control.models.ScriptProperties](#adxcontrolmodelsscriptproperties) + * [adx.control.models.ScriptProperties.ScriptProperties](#adxcontrolmodelsscriptpropertiesscriptproperties) + * [adx.control.models.ScriptProperties_1](#adxcontrolmodelsscriptproperties_1) + * [adx.control.models.ScriptProperties_1.ScriptProperties_1](#adxcontrolmodelsscriptproperties_1scriptproperties_1) + * [adx.control.models.SkuDescription](#adxcontrolmodelsskudescription) + * [adx.control.models.SkuDescription.SkuDescription](#adxcontrolmodelsskudescriptionskudescription) + * [adx.control.models.SkuDescriptionList](#adxcontrolmodelsskudescriptionlist) + * [adx.control.models.SkuDescriptionList.SkuDescriptionList](#adxcontrolmodelsskudescriptionlistskudescriptionlist) + * [adx.control.models.SkuLocationInfoItem](#adxcontrolmodelsskulocationinfoitem) + * [adx.control.models.SkuLocationInfoItem.SkuLocationInfoItem](#adxcontrolmodelsskulocationinfoitemskulocationinfoitem) + * [adx.control.models.Status](#adxcontrolmodelsstatus) + * [adx.control.models.Status.Status](#adxcontrolmodelsstatusstatus) + * [adx.control.models.SuspensionDetails](#adxcontrolmodelssuspensiondetails) + * [adx.control.models.SuspensionDetails.SuspensionDetails](#adxcontrolmodelssuspensiondetailssuspensiondetails) + * [adx.control.models.TableLevelSharingProperties](#adxcontrolmodelstablelevelsharingproperties) + * [adx.control.models.TableLevelSharingProperties.TableLevelSharingProperties](#adxcontrolmodelstablelevelsharingpropertiestablelevelsharingproperties) + * [adx.control.models.The_object_that_describes_the_operation_](#adxcontrolmodelsthe_object_that_describes_the_operation_) + * [adx.control.models.The_object_that_describes_the_operation_.The_object_that_describes_the_operation_](#adxcontrolmodelsthe_object_that_describes_the_operation_the_object_that_describes_the_operation_) + * [adx.control.models.TrackedResource](#adxcontrolmodelstrackedresource) + * [adx.control.models.TrackedResource.TrackedResource](#adxcontrolmodelstrackedresourcetrackedresource) + * [adx.control.models.TrustedExternalTenant](#adxcontrolmodelstrustedexternaltenant) + * [adx.control.models.TrustedExternalTenant.TrustedExternalTenant](#adxcontrolmodelstrustedexternaltenanttrustedexternaltenant) + * [adx.control.models.VirtualNetworkConfiguration](#adxcontrolmodelsvirtualnetworkconfiguration) + * [adx.control.models.VirtualNetworkConfiguration.VirtualNetworkConfiguration](#adxcontrolmodelsvirtualnetworkconfigurationvirtualnetworkconfiguration) + * [adx.control.models.systemData](#adxcontrolmodelssystemdata) + * [adx.control.models.systemData.systemData](#adxcontrolmodelssystemdatasystemdata) + * [adx.control.models.systemDataCreatedByTypeEnum](#adxcontrolmodelssystemdatacreatedbytypeenum) + * [adx.control.models.systemDataCreatedByTypeEnum.systemDataCreatedByTypeEnum](#adxcontrolmodelssystemdatacreatedbytypeenumsystemdatacreatedbytypeenum) + * [adx.control.models.systemDataLastModifiedByTypeEnum](#adxcontrolmodelssystemdatalastmodifiedbytypeenum) + * [adx.control.models.systemDataLastModifiedByTypeEnum.systemDataLastModifiedByTypeEnum](#adxcontrolmodelssystemdatalastmodifiedbytypeenumsystemdatalastmodifiedbytypeenum) + * [adx.control.BaseClient](#adxcontrolbaseclient) + * [adx.control.BaseClient.BaseClient](#adxcontrolbaseclientbaseclient) + * [adx.control.BaseClient.applyCookies](#adxcontrolbaseclientapplycookies) + * [adx.control.BaseClient.getOAuthToken](#adxcontrolbaseclientgetoauthtoken) + * [adx.control.BaseClient.getPropertyGroups](#adxcontrolbaseclientgetpropertygroups) + * [adx.control.BaseClient.loadConfigFile](#adxcontrolbaseclientloadconfigfile) + * [adx.control.BaseClient.postSend](#adxcontrolbaseclientpostsend) + * [adx.control.BaseClient.preSend](#adxcontrolbaseclientpresend) + * [adx.control.BaseClient.requestAuth](#adxcontrolbaseclientrequestauth) + * [adx.control.BaseClient.setCookies](#adxcontrolbaseclientsetcookies) + * [adx.control.CookieJar](#adxcontrolcookiejar) + * [adx.control.CookieJar.CookieJar](#adxcontrolcookiejarcookiejar) + * [adx.control.CookieJar.getCookies](#adxcontrolcookiejargetcookies) + * [adx.control.CookieJar.load](#adxcontrolcookiejarload) + * [adx.control.CookieJar.persist](#adxcontrolcookiejarpersist) + * [adx.control.CookieJar.purge](#adxcontrolcookiejarpurge) + * [adx.control.CookieJar.setCookies](#adxcontrolcookiejarsetcookies) + * [adx.control.JSONEnum](#adxcontroljsonenum) + * [adx.control.JSONEnum.JSONEnum](#adxcontroljsonenumjsonenum) + * [adx.control.JSONEnum.fromJSON](#adxcontroljsonenumfromjson) + * [adx.control.JSONMapper](#adxcontroljsonmapper) + * [adx.control.JSONMapper.ConstructorArgument](#adxcontroljsonmapperconstructorargument) + * [adx.control.JSONMapper.JSONArray](#adxcontroljsonmapperjsonarray) + * [adx.control.JSONMapper.JSONMapper](#adxcontroljsonmapperjsonmapper) + * [adx.control.JSONMapper.doNotParse](#adxcontroljsonmapperdonotparse) + * [adx.control.JSONMapper.epochDatetime](#adxcontroljsonmapperepochdatetime) + * [adx.control.JSONMapper.fieldName](#adxcontroljsonmapperfieldname) + * [adx.control.JSONMapper.fromJSON](#adxcontroljsonmapperfromjson) + * [adx.control.JSONMapper.getPayload](#adxcontroljsonmappergetpayload) + * [adx.control.JSONMapper.jsonencode](#adxcontroljsonmapperjsonencode) + * [adx.control.JSONMapper.stringDatetime](#adxcontroljsonmapperstringdatetime) + * [adx.control.JSONMapperMap](#adxcontroljsonmappermap) + * [adx.control.JSONMapperMap.JSONMapperMap](#adxcontroljsonmappermapjsonmappermap) + * [adx.control.JSONMapperMap.disp](#adxcontroljsonmappermapdisp) + * [adx.control.JSONMapperMap.jsonencode](#adxcontroljsonmappermapjsonencode) + * [adx.control.JSONMapperMap.subsasgn](#adxcontroljsonmappermapsubsasgn) + * [adx.control.JSONMapperMap.subsref](#adxcontroljsonmappermapsubsref) + * [adx.control.JSONPropertyInfo](#adxcontroljsonpropertyinfo) + * [adx.control.JSONPropertyInfo.JSONPropertyInfo](#adxcontroljsonpropertyinfojsonpropertyinfo) + * [adx.control.JSONPropertyInfo.getPropertyInfo](#adxcontroljsonpropertyinfogetpropertyinfo) + * [adx.data](#adxdata) + * [adx.data.api](#adxdataapi) + * [adx.data.api.Ingest](#adxdataapiingest) + * [adx.data.api.Ingest.Ingest](#adxdataapiingestingest) + * [adx.data.api.Ingest.ingestRun](#adxdataapiingestingestrun) + * [adx.data.api.Management](#adxdataapimanagement) + * [adx.data.api.Management.Management](#adxdataapimanagementmanagement) + * [adx.data.api.Management.getPropertyGroups](#adxdataapimanagementgetpropertygroups) + * [adx.data.api.Management.managementRun](#adxdataapimanagementmanagementrun) + * [adx.data.api.Query](#adxdataapiquery) + * [adx.data.api.Query.Query](#adxdataapiqueryquery) + * [adx.data.api.Query.queryRun](#adxdataapiqueryqueryrun) + * [adx.data.models](#adxdatamodels) + * [adx.data.models.ClientRequestProperties](#adxdatamodelsclientrequestproperties) + * [adx.data.models.ClientRequestProperties.ClientRequestProperties](#adxdatamodelsclientrequestpropertiesclientrequestproperties) + * [adx.data.models.ClientRequestPropertiesOptions](#adxdatamodelsclientrequestpropertiesoptions) + * [adx.data.models.ClientRequestPropertiesOptions.ClientRequestPropertiesOptions](#adxdatamodelsclientrequestpropertiesoptionsclientrequestpropertiesoptions) + * [adx.data.models.Column](#adxdatamodelscolumn) + * [adx.data.models.Column.Column](#adxdatamodelscolumncolumn) + * [adx.data.models.ColumnV1](#adxdatamodelscolumnv1) + * [adx.data.models.ColumnV1.ColumnV1](#adxdatamodelscolumnv1columnv1) + * [adx.data.models.DataSetCompletion](#adxdatamodelsdatasetcompletion) + * [adx.data.models.DataSetCompletion.DataSetCompletion](#adxdatamodelsdatasetcompletiondatasetcompletion) + * [adx.data.models.DataSetHeader](#adxdatamodelsdatasetheader) + * [adx.data.models.DataSetHeader.DataSetHeader](#adxdatamodelsdatasetheaderdatasetheader) + * [adx.data.models.DataTable](#adxdatamodelsdatatable) + * [adx.data.models.DataTable.DataTable](#adxdatamodelsdatatabledatatable) + * [adx.data.models.DataTableV1](#adxdatamodelsdatatablev1) + * [adx.data.models.DataTableV1.DataTableV1](#adxdatamodelsdatatablev1datatablev1) + * [adx.data.models.DataTables](#adxdatamodelsdatatables) + * [adx.data.models.DataTables.DataTables](#adxdatamodelsdatatablesdatatables) + * [adx.data.models.DataTablesV1](#adxdatamodelsdatatablesv1) + * [adx.data.models.DataTablesV1.DataTablesV1](#adxdatamodelsdatatablesv1datatablesv1) + * [adx.data.models.IngestionResourcesSnapshot](#adxdatamodelsingestionresourcessnapshot) + * [adx.data.models.IngestionResourcesSnapshot.IngestionResourcesSnapshot](#adxdatamodelsingestionresourcessnapshotingestionresourcessnapshot) + * [adx.data.models.IngestionResourcesSnapshot.table](#adxdatamodelsingestionresourcessnapshottable) + * [adx.data.models.ManagementRequest](#adxdatamodelsmanagementrequest) + * [adx.data.models.ManagementRequest.ManagementRequest](#adxdatamodelsmanagementrequestmanagementrequest) + * [adx.data.models.QueryParameter](#adxdatamodelsqueryparameter) + * [adx.data.models.QueryParameter.QueryParameter](#adxdatamodelsqueryparameterqueryparameter) + * [adx.data.models.QueryRequest](#adxdatamodelsqueryrequest) + * [adx.data.models.QueryRequest.QueryRequest](#adxdatamodelsqueryrequestqueryrequest) + * [adx.data.models.QueryV1ResponseRaw](#adxdatamodelsqueryv1responseraw) + * [adx.data.models.QueryV1ResponseRaw.QueryV1ResponseRaw](#adxdatamodelsqueryv1responserawqueryv1responseraw) + * [adx.data.models.QueryV2ResponseRaw](#adxdatamodelsqueryv2responseraw) + * [adx.data.models.QueryV2ResponseRaw.QueryV2ResponseRaw](#adxdatamodelsqueryv2responserawqueryv2responseraw) + * [adx.data.models.QueryV2ResponseRaw.getDataSetCompletionFrame](#adxdatamodelsqueryv2responserawgetdatasetcompletionframe) + * [adx.data.models.QueryV2ResponseRaw.getDataSetHeader](#adxdatamodelsqueryv2responserawgetdatasetheader) + * [adx.data.models.QueryV2ResponseUnparsedRows](#adxdatamodelsqueryv2responseunparsedrows) + * [adx.data.models.QueryV2ResponseUnparsedRows.QueryV2ResponseUnparsedRows](#adxdatamodelsqueryv2responseunparsedrowsqueryv2responseunparsedrows) + * [adx.data.models.QueryV2ResponseUnparsedRows.getDataSetCompletionFrame](#adxdatamodelsqueryv2responseunparsedrowsgetdatasetcompletionframe) + * [adx.data.models.QueryV2ResponseUnparsedRows.getDataSetHeader](#adxdatamodelsqueryv2responseunparsedrowsgetdatasetheader) + * [adx.data.models.QueueIngestionMessage](#adxdatamodelsqueueingestionmessage) + * [adx.data.models.QueueIngestionMessage.QueueIngestionMessage](#adxdatamodelsqueueingestionmessagequeueingestionmessage) + * [adx.data.models.Row](#adxdatamodelsrow) + * [adx.data.models.Row.Row](#adxdatamodelsrowrow) + * [adx.data.models.RowUnparsed](#adxdatamodelsrowunparsed) + * [adx.data.models.RowUnparsed.RowUnparsed](#adxdatamodelsrowunparsedrowunparsed) + * [adx.data.models.RowsUnparsed](#adxdatamodelsrowsunparsed) + * [adx.data.models.RowsUnparsed.RowsUnparsed](#adxdatamodelsrowsunparsedrowsunparsed) + * [adx.data.models.StreamFormat](#adxdatamodelsstreamformat) + * [adx.data.models.StreamFormat.StreamFormat](#adxdatamodelsstreamformatstreamformat) + * [adx.data.models.TableCompletion](#adxdatamodelstablecompletion) + * [adx.data.models.TableCompletion.TableCompletion](#adxdatamodelstablecompletiontablecompletion) + * [adx.data.models.TableFragment](#adxdatamodelstablefragment) + * [adx.data.models.TableFragment.TableFragment](#adxdatamodelstablefragmenttablefragment) + * [adx.data.models.TableFragmentType](#adxdatamodelstablefragmenttype) + * [adx.data.models.TableFragmentType.TableFragmentType](#adxdatamodelstablefragmenttypetablefragmenttype) + * [adx.data.models.TableHeader](#adxdatamodelstableheader) + * [adx.data.models.TableHeader.TableHeader](#adxdatamodelstableheadertableheader) + * [adx.data.models.TableKind](#adxdatamodelstablekind) + * [adx.data.models.TableKind.TableKind](#adxdatamodelstablekindtablekind) + * [adx.data.models.TableProgress](#adxdatamodelstableprogress) + * [adx.data.models.TableProgress.TableProgress](#adxdatamodelstableprogresstableprogress) + * [azure](#azure) + * [azure.core](#azurecore) + * [azure.core.credential](#azurecorecredential) + * [azure.core.credential.AccessToken](#azurecorecredentialaccesstoken) + * [azure.core.credential.AccessToken.AccessToken](#azurecorecredentialaccesstokenaccesstoken) + * [azure.core.credential.AccessToken.getToken](#azurecorecredentialaccesstokengettoken) + * [azure.core.credential.AccessToken.isExpired](#azurecorecredentialaccesstokenisexpired) + * [azure.core.credential.AzureSasCredential](#azurecorecredentialazuresascredential) + * [azure.core.credential.AzureSasCredential.AzureSasCredential](#azurecorecredentialazuresascredentialazuresascredential) + * [azure.core.credential.AzureSasCredential.AzureSasSignature](#azurecorecredentialazuresascredentialazuresassignature) + * [azure.core.credential.AzureSasCredential.getSignature](#azurecorecredentialazuresascredentialgetsignature) + * [azure.core.credential.AzureSasCredential.update](#azurecorecredentialazuresascredentialupdate) + * [azure.core.credential.TokenCredential](#azurecorecredentialtokencredential) + * [azure.core.credential.TokenCredential.TokenCredential](#azurecorecredentialtokencredentialtokencredential) + * [azure.core.credential.TokenCredential.getToken](#azurecorecredentialtokencredentialgettoken) + * [azure.core.credential.TokenCredential.getTokenSync](#azurecorecredentialtokencredentialgettokensync) + * [azure.core.credential.TokenRequestContext](#azurecorecredentialtokenrequestcontext) + * [azure.core.credential.TokenRequestContext.TokenRequestContext](#azurecorecredentialtokenrequestcontexttokenrequestcontext) + * [azure.core.credential.TokenRequestContext.addScopes](#azurecorecredentialtokenrequestcontextaddscopes) + * [azure.core.credential.TokenRequestContext.getClaims](#azurecorecredentialtokenrequestcontextgetclaims) + * [azure.core.credential.TokenRequestContext.getScopes](#azurecorecredentialtokenrequestcontextgetscopes) + * [azure.core.credential.TokenRequestContext.getTenantId](#azurecorecredentialtokenrequestcontextgettenantid) + * [azure.core.credential.TokenRequestContext.setClaims](#azurecorecredentialtokenrequestcontextsetclaims) + * [azure.core.credential.TokenRequestContext.setTenantId](#azurecorecredentialtokenrequestcontextsettenantid) + * [azure.core.util](#azurecoreutil) + * [azure.core.util.polling](#azurecoreutilpolling) + * [azure.core.util.polling.LongRunningOperationStatus](#azurecoreutilpollinglongrunningoperationstatus) + * [azure.core.util.polling.LongRunningOperationStatus.LongRunningOperationStatus](#azurecoreutilpollinglongrunningoperationstatuslongrunningoperationstatus) + * [azure.core.util.polling.LongRunningOperationStatus.fromString](#azurecoreutilpollinglongrunningoperationstatusfromstring) + * [azure.core.util.polling.LongRunningOperationStatus.isComplete](#azurecoreutilpollinglongrunningoperationstatusiscomplete) + * [azure.core.util.polling.LongRunningOperationStatus.toString](#azurecoreutilpollinglongrunningoperationstatustostring) + * [azure.core.util.polling.PollResponse](#azurecoreutilpollingpollresponse) + * [azure.core.util.polling.PollResponse.PollResponse](#azurecoreutilpollingpollresponsepollresponse) + * [azure.core.util.polling.PollResponse.getRetryAfter](#azurecoreutilpollingpollresponsegetretryafter) + * [azure.core.util.polling.PollResponse.getStatus](#azurecoreutilpollingpollresponsegetstatus) + * [azure.core.util.polling.PollResponse.getValue](#azurecoreutilpollingpollresponsegetvalue) + * [azure.core.util.polling.SyncPoller](#azurecoreutilpollingsyncpoller) + * [azure.core.util.polling.SyncPoller.SyncPoller](#azurecoreutilpollingsyncpollersyncpoller) + * [azure.core.util.polling.SyncPoller.cancelOperation](#azurecoreutilpollingsyncpollercanceloperation) + * [azure.core.util.polling.SyncPoller.poll](#azurecoreutilpollingsyncpollerpoll) + * [azure.core.util.polling.SyncPoller.waitForCompletion](#azurecoreutilpollingsyncpollerwaitforcompletion) + * [azure.identity](#azureidentity) + * [azure.identity.AuthenticationRecord](#azureidentityauthenticationrecord) + * [azure.identity.AuthenticationRecord.AuthenticationRecord](#azureidentityauthenticationrecordauthenticationrecord) + * [azure.identity.AuthenticationRecord.subscribe](#azureidentityauthenticationrecordsubscribe) + * [azure.identity.AzureCliCredential](#azureidentityazureclicredential) + * [azure.identity.AzureCliCredential.AzureCliCredential](#azureidentityazureclicredentialazureclicredential) + * [azure.identity.AzureCliCredentialBuilder](#azureidentityazureclicredentialbuilder) + * [azure.identity.AzureCliCredentialBuilder.AzureCliCredentialBuilder](#azureidentityazureclicredentialbuilderazureclicredentialbuilder) + * [azure.identity.AzureCliCredentialBuilder.build](#azureidentityazureclicredentialbuilderbuild) + * [azure.identity.ChainedTokenCredential](#azureidentitychainedtokencredential) + * [azure.identity.ChainedTokenCredential.ChainedTokenCredential](#azureidentitychainedtokencredentialchainedtokencredential) + * [azure.identity.ChainedTokenCredentialBuilder](#azureidentitychainedtokencredentialbuilder) + * [azure.identity.ChainedTokenCredentialBuilder.ChainedTokenCredentialBuilder](#azureidentitychainedtokencredentialbuilderchainedtokencredentialbuilder) + * [azure.identity.ChainedTokenCredentialBuilder.addLast](#azureidentitychainedtokencredentialbuilderaddlast) + * [azure.identity.ChainedTokenCredentialBuilder.build](#azureidentitychainedtokencredentialbuilderbuild) + * [azure.identity.ClientCertificateCredential](#azureidentityclientcertificatecredential) + * [azure.identity.ClientCertificateCredential.ClientCertificateCredential](#azureidentityclientcertificatecredentialclientcertificatecredential) + * [azure.identity.ClientCertificateCredentialBuilder](#azureidentityclientcertificatecredentialbuilder) + * [azure.identity.ClientCertificateCredentialBuilder.ClientCertificateCredentialBuilder](#azureidentityclientcertificatecredentialbuilderclientcertificatecredentialbuilder) + * [azure.identity.ClientCertificateCredentialBuilder.authorityHost](#azureidentityclientcertificatecredentialbuilderauthorityhost) + * [azure.identity.ClientCertificateCredentialBuilder.build](#azureidentityclientcertificatecredentialbuilderbuild) + * [azure.identity.ClientCertificateCredentialBuilder.clientId](#azureidentityclientcertificatecredentialbuilderclientid) + * [azure.identity.ClientCertificateCredentialBuilder.pemCertificate](#azureidentityclientcertificatecredentialbuilderpemcertificate) + * [azure.identity.ClientCertificateCredentialBuilder.tenantId](#azureidentityclientcertificatecredentialbuildertenantid) + * [azure.identity.ClientSecretCredential](#azureidentityclientsecretcredential) + * [azure.identity.ClientSecretCredential.ClientSecretCredential](#azureidentityclientsecretcredentialclientsecretcredential) + * [azure.identity.ClientSecretCredentialBuilder](#azureidentityclientsecretcredentialbuilder) + * [azure.identity.ClientSecretCredentialBuilder.ClientSecretCredentialBuilder](#azureidentityclientsecretcredentialbuilderclientsecretcredentialbuilder) + * [azure.identity.ClientSecretCredentialBuilder.authorityHost](#azureidentityclientsecretcredentialbuilderauthorityhost) + * [azure.identity.ClientSecretCredentialBuilder.build](#azureidentityclientsecretcredentialbuilderbuild) + * [azure.identity.ClientSecretCredentialBuilder.clientId](#azureidentityclientsecretcredentialbuilderclientid) + * [azure.identity.ClientSecretCredentialBuilder.clientSecret](#azureidentityclientsecretcredentialbuilderclientsecret) + * [azure.identity.ClientSecretCredentialBuilder.tenantId](#azureidentityclientsecretcredentialbuildertenantid) + * [azure.identity.CredentialBuilderBase](#azureidentitycredentialbuilderbase) + * [azure.identity.CredentialBuilderBase.CredentialBuilderBase](#azureidentitycredentialbuilderbasecredentialbuilderbase) + * [azure.identity.CredentialBuilderBase.httpClient](#azureidentitycredentialbuilderbasehttpclient) + * [azure.identity.DefaultAzureCredential](#azureidentitydefaultazurecredential) + * [azure.identity.DefaultAzureCredential.DefaultAzureCredential](#azureidentitydefaultazurecredentialdefaultazurecredential) + * [azure.identity.DefaultAzureCredentialBuilder](#azureidentitydefaultazurecredentialbuilder) + * [azure.identity.DefaultAzureCredentialBuilder.DefaultAzureCredentialBuilder](#azureidentitydefaultazurecredentialbuilderdefaultazurecredentialbuilder) + * [azure.identity.DefaultAzureCredentialBuilder.authorityHost](#azureidentitydefaultazurecredentialbuilderauthorityhost) + * [azure.identity.DefaultAzureCredentialBuilder.build](#azureidentitydefaultazurecredentialbuilderbuild) + * [azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId](#azureidentitydefaultazurecredentialbuildermanagedidentityclientid) + * [azure.identity.DefaultAzureCredentialBuilder.tenantId](#azureidentitydefaultazurecredentialbuildertenantid) + * [azure.identity.DeviceCodeCredential](#azureidentitydevicecodecredential) + * [azure.identity.DeviceCodeCredential.DeviceCodeCredential](#azureidentitydevicecodecredentialdevicecodecredential) + * [azure.identity.DeviceCodeCredential.authenticate](#azureidentitydevicecodecredentialauthenticate) + * [azure.identity.DeviceCodeCredentialBuilder](#azureidentitydevicecodecredentialbuilder) + * [azure.identity.DeviceCodeCredentialBuilder.DeviceCodeCredentialBuilder](#azureidentitydevicecodecredentialbuilderdevicecodecredentialbuilder) + * [azure.identity.DeviceCodeCredentialBuilder.authorityHost](#azureidentitydevicecodecredentialbuilderauthorityhost) + * [azure.identity.DeviceCodeCredentialBuilder.build](#azureidentitydevicecodecredentialbuilderbuild) + * [azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate](#azureidentitydevicecodecredentialbuilderbuildandauthenticate) + * [azure.identity.DeviceCodeCredentialBuilder.clientId](#azureidentitydevicecodecredentialbuilderclientid) + * [azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication](#azureidentitydevicecodecredentialbuilderdisableautomaticauthentication) + * [azure.identity.DeviceCodeCredentialBuilder.maxRetry](#azureidentitydevicecodecredentialbuildermaxretry) + * [azure.identity.DeviceCodeCredentialBuilder.tenantId](#azureidentitydevicecodecredentialbuildertenantid) + * [azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions](#azureidentitydevicecodecredentialbuildertokencachepersistenceoptions) + * [azure.identity.DeviceCodeInfo](#azureidentitydevicecodeinfo) + * [azure.identity.DeviceCodeInfo.DeviceCodeInfo](#azureidentitydevicecodeinfodevicecodeinfo) + * [azure.identity.DeviceCodeInfo.getExpiresOn](#azureidentitydevicecodeinfogetexpireson) + * [azure.identity.DeviceCodeInfo.getMessage](#azureidentitydevicecodeinfogetmessage) + * [azure.identity.DeviceCodeInfo.getUserCode](#azureidentitydevicecodeinfogetusercode) + * [azure.identity.DeviceCodeInfo.getVerificationUrl](#azureidentitydevicecodeinfogetverificationurl) + * [azure.identity.EnvironmentCredential](#azureidentityenvironmentcredential) + * [azure.identity.EnvironmentCredential.EnvironmentCredential](#azureidentityenvironmentcredentialenvironmentcredential) + * [azure.identity.EnvironmentCredentialBuilder](#azureidentityenvironmentcredentialbuilder) + * [azure.identity.EnvironmentCredentialBuilder.EnvironmentCredentialBuilder](#azureidentityenvironmentcredentialbuilderenvironmentcredentialbuilder) + * [azure.identity.EnvironmentCredentialBuilder.authorityHost](#azureidentityenvironmentcredentialbuilderauthorityhost) + * [azure.identity.EnvironmentCredentialBuilder.build](#azureidentityenvironmentcredentialbuilderbuild) + * [azure.identity.InteractiveBrowserCredential](#azureidentityinteractivebrowsercredential) + * [azure.identity.InteractiveBrowserCredential.InteractiveBrowserCredential](#azureidentityinteractivebrowsercredentialinteractivebrowsercredential) + * [azure.identity.InteractiveBrowserCredentialBuilder](#azureidentityinteractivebrowsercredentialbuilder) + * [azure.identity.InteractiveBrowserCredentialBuilder.InteractiveBrowserCredentialBuilder](#azureidentityinteractivebrowsercredentialbuilderinteractivebrowsercredentialbuilder) + * [azure.identity.InteractiveBrowserCredentialBuilder.authorityHost](#azureidentityinteractivebrowsercredentialbuilderauthorityhost) + * [azure.identity.InteractiveBrowserCredentialBuilder.build](#azureidentityinteractivebrowsercredentialbuilderbuild) + * [azure.identity.InteractiveBrowserCredentialBuilder.clientId](#azureidentityinteractivebrowsercredentialbuilderclientid) + * [azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl](#azureidentityinteractivebrowsercredentialbuilderredirecturl) + * [azure.identity.InteractiveBrowserCredentialBuilder.tenantId](#azureidentityinteractivebrowsercredentialbuildertenantid) + * [azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions](#azureidentityinteractivebrowsercredentialbuildertokencachepersistenceoptions) + * [azure.identity.ManagedIdentityCredential](#azureidentitymanagedidentitycredential) + * [azure.identity.ManagedIdentityCredential.ManagedIdentityCredential](#azureidentitymanagedidentitycredentialmanagedidentitycredential) + * [azure.identity.ManagedIdentityCredential.getClientId](#azureidentitymanagedidentitycredentialgetclientid) + * [azure.identity.ManagedIdentityCredentialBuilder](#azureidentitymanagedidentitycredentialbuilder) + * [azure.identity.ManagedIdentityCredentialBuilder.ManagedIdentityCredentialBuilder](#azureidentitymanagedidentitycredentialbuildermanagedidentitycredentialbuilder) + * [azure.identity.ManagedIdentityCredentialBuilder.build](#azureidentitymanagedidentitycredentialbuilderbuild) + * [azure.identity.ManagedIdentityCredentialBuilder.clientId](#azureidentitymanagedidentitycredentialbuilderclientid) + * [azure.identity.ManagedIdentityCredentialBuilder.maxRetry](#azureidentitymanagedidentitycredentialbuildermaxretry) + * [azure.identity.ManagedIdentityCredentialBuilder.resourceId](#azureidentitymanagedidentitycredentialbuilderresourceid) + * [azure.identity.SharedTokenCacheCredential](#azureidentitysharedtokencachecredential) + * [azure.identity.SharedTokenCacheCredential.SharedTokenCacheCredential](#azureidentitysharedtokencachecredentialsharedtokencachecredential) + * [azure.identity.SharedTokenCacheCredential.restFlow](#azureidentitysharedtokencachecredentialrestflow) + * [azure.identity.SharedTokenCacheCredential.restGetSas](#azureidentitysharedtokencachecredentialrestgetsas) + * [azure.identity.SharedTokenCacheCredentialBuilder](#azureidentitysharedtokencachecredentialbuilder) + * [azure.identity.SharedTokenCacheCredentialBuilder.SharedTokenCacheCredentialBuilder](#azureidentitysharedtokencachecredentialbuildersharedtokencachecredentialbuilder) + * [azure.identity.SharedTokenCacheCredentialBuilder.authorityHost](#azureidentitysharedtokencachecredentialbuilderauthorityhost) + * [azure.identity.SharedTokenCacheCredentialBuilder.build](#azureidentitysharedtokencachecredentialbuilderbuild) + * [azure.identity.SharedTokenCacheCredentialBuilder.clientId](#azureidentitysharedtokencachecredentialbuilderclientid) + * [azure.identity.SharedTokenCacheCredentialBuilder.tenantId](#azureidentitysharedtokencachecredentialbuildertenantid) + * [azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions](#azureidentitysharedtokencachecredentialbuildertokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions](#azureidentitytokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions.TokenCachePersistenceOptions](#azureidentitytokencachepersistenceoptionstokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions.getName](#azureidentitytokencachepersistenceoptionsgetname) + * [azure.identity.TokenCachePersistenceOptions.setName](#azureidentitytokencachepersistenceoptionssetname) + * [azure.mathworks](#azuremathworks) + * [azure.mathworks.internal](#azuremathworksinternal) + * [azure.mathworks.internal.compareAuthEnvVars](#azuremathworksinternalcompareauthenvvars) + * [azure.mathworks.internal.datetime2OffsetDateTime](#azuremathworksinternaldatetime2offsetdatetime) + * [azure.mathworks.internal.int64FnHandler](#azuremathworksinternalint64fnhandler) + * [azure.security](#azuresecurity) + * [azure.security.keyvault](#azuresecuritykeyvault) + * [azure.security.keyvault.keys](#azuresecuritykeyvaultkeys) + * [azure.security.keyvault.keys.models](#azuresecuritykeyvaultkeysmodels) + * [azure.security.keyvault.keys.models.DeletedKey](#azuresecuritykeyvaultkeysmodelsdeletedkey) + * [azure.security.keyvault.keys.models.DeletedKey.DeletedKey](#azuresecuritykeyvaultkeysmodelsdeletedkeydeletedkey) + * [azure.security.keyvault.keys.models.DeletedKey.getDeletedOn](#azuresecuritykeyvaultkeysmodelsdeletedkeygetdeletedon) + * [azure.security.keyvault.keys.models.DeletedKey.getRecoveryId](#azuresecuritykeyvaultkeysmodelsdeletedkeygetrecoveryid) + * [azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate](#azuresecuritykeyvaultkeysmodelsdeletedkeygetscheduledpurgedate) + * [azure.security.keyvault.keys.models.JsonWebKey](#azuresecuritykeyvaultkeysmodelsjsonwebkey) + * [azure.security.keyvault.keys.models.JsonWebKey.JsonWebKey](#azuresecuritykeyvaultkeysmodelsjsonwebkeyjsonwebkey) + * [azure.security.keyvault.keys.models.JsonWebKey.clearMemory](#azuresecuritykeyvaultkeysmodelsjsonwebkeyclearmemory) + * [azure.security.keyvault.keys.models.JsonWebKey.getId](#azuresecuritykeyvaultkeysmodelsjsonwebkeygetid) + * [azure.security.keyvault.keys.models.JsonWebKey.getKeyType](#azuresecuritykeyvaultkeysmodelsjsonwebkeygetkeytype) + * [azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey](#azuresecuritykeyvaultkeysmodelsjsonwebkeyhasprivatekey) + * [azure.security.keyvault.keys.models.JsonWebKey.isValid](#azuresecuritykeyvaultkeysmodelsjsonwebkeyisvalid) + * [azure.security.keyvault.keys.models.JsonWebKey.toAes](#azuresecuritykeyvaultkeysmodelsjsonwebkeytoaes) + * [azure.security.keyvault.keys.models.JsonWebKey.toEc](#azuresecuritykeyvaultkeysmodelsjsonwebkeytoec) + * [azure.security.keyvault.keys.models.JsonWebKey.toRsa](#azuresecuritykeyvaultkeysmodelsjsonwebkeytorsa) + * [azure.security.keyvault.keys.models.JsonWebKey.toString](#azuresecuritykeyvaultkeysmodelsjsonwebkeytostring) + * [azure.security.keyvault.keys.models.KeyProperties](#azuresecuritykeyvaultkeysmodelskeyproperties) + * [azure.security.keyvault.keys.models.KeyProperties.KeyProperties](#azuresecuritykeyvaultkeysmodelskeypropertieskeyproperties) + * [azure.security.keyvault.keys.models.KeyProperties.getId](#azuresecuritykeyvaultkeysmodelskeypropertiesgetid) + * [azure.security.keyvault.keys.models.KeyProperties.getKeyId](#azuresecuritykeyvaultkeysmodelskeypropertiesgetkeyid) + * [azure.security.keyvault.keys.models.KeyProperties.getName](#azuresecuritykeyvaultkeysmodelskeypropertiesgetname) + * [azure.security.keyvault.keys.models.KeyProperties.getVersion](#azuresecuritykeyvaultkeysmodelskeypropertiesgetversion) + * [azure.security.keyvault.keys.models.KeyType](#azuresecuritykeyvaultkeysmodelskeytype) + * [azure.security.keyvault.keys.models.KeyType.KeyType](#azuresecuritykeyvaultkeysmodelskeytypekeytype) + * [azure.security.keyvault.keys.models.KeyType.fromString](#azuresecuritykeyvaultkeysmodelskeytypefromstring) + * [azure.security.keyvault.keys.models.KeyType.toJava](#azuresecuritykeyvaultkeysmodelskeytypetojava) + * [azure.security.keyvault.keys.models.KeyType.toString](#azuresecuritykeyvaultkeysmodelskeytypetostring) + * [azure.security.keyvault.keys.models.KeyVaultKey](#azuresecuritykeyvaultkeysmodelskeyvaultkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.KeyVaultKey](#azuresecuritykeyvaultkeysmodelskeyvaultkeykeyvaultkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.getId](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetid) + * [azure.security.keyvault.keys.models.KeyVaultKey.getKey](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.getKeyType](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetkeytype) + * [azure.security.keyvault.keys.models.KeyVaultKey.getName](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetname) + * [azure.security.keyvault.keys.models.KeyVaultKey.getProperties](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetproperties) + * [azure.security.keyvault.keys.KeyClient](#azuresecuritykeyvaultkeyskeyclient) + * [azure.security.keyvault.keys.KeyClient.KeyClient](#azuresecuritykeyvaultkeyskeyclientkeyclient) + * [azure.security.keyvault.keys.KeyClient.beginDeleteKey](#azuresecuritykeyvaultkeyskeyclientbegindeletekey) + * [azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey](#azuresecuritykeyvaultkeyskeyclientbeginrecoverdeletedkey) + * [azure.security.keyvault.keys.KeyClient.createKey](#azuresecuritykeyvaultkeyskeyclientcreatekey) + * [azure.security.keyvault.keys.KeyClient.getDeletedKey](#azuresecuritykeyvaultkeyskeyclientgetdeletedkey) + * [azure.security.keyvault.keys.KeyClient.getKey](#azuresecuritykeyvaultkeyskeyclientgetkey) + * [azure.security.keyvault.keys.KeyClient.getVaultUrl](#azuresecuritykeyvaultkeyskeyclientgetvaulturl) + * [azure.security.keyvault.keys.KeyClient.listDeletedKeys](#azuresecuritykeyvaultkeyskeyclientlistdeletedkeys) + * [azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys](#azuresecuritykeyvaultkeyskeyclientlistpropertiesofkeys) + * [azure.security.keyvault.keys.KeyClient.purgeDeletedKey](#azuresecuritykeyvaultkeyskeyclientpurgedeletedkey) + * [azure.security.keyvault.keys.KeyClientBuilder](#azuresecuritykeyvaultkeyskeyclientbuilder) + * [azure.security.keyvault.keys.KeyClientBuilder.KeyClientBuilder](#azuresecuritykeyvaultkeyskeyclientbuilderkeyclientbuilder) + * [azure.security.keyvault.keys.KeyClientBuilder.buildClient](#azuresecuritykeyvaultkeyskeyclientbuilderbuildclient) + * [azure.security.keyvault.keys.KeyClientBuilder.credential](#azuresecuritykeyvaultkeyskeyclientbuildercredential) + * [azure.security.keyvault.keys.KeyClientBuilder.httpClient](#azuresecuritykeyvaultkeyskeyclientbuilderhttpclient) + * [azure.security.keyvault.keys.KeyClientBuilder.vaultUrl](#azuresecuritykeyvaultkeyskeyclientbuildervaulturl) + * [azure.security.keyvault.secrets](#azuresecuritykeyvaultsecrets) + * [azure.security.keyvault.secrets.models](#azuresecuritykeyvaultsecretsmodels) + * [azure.security.keyvault.secrets.models.DeletedSecret](#azuresecuritykeyvaultsecretsmodelsdeletedsecret) + * [azure.security.keyvault.secrets.models.DeletedSecret.DeletedSecret](#azuresecuritykeyvaultsecretsmodelsdeletedsecretdeletedsecret) + * [azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetdeletedon) + * [azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetrecoveryid) + * [azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetscheduledpurgedate) + * [azure.security.keyvault.secrets.models.KeyVaultSecret](#azuresecuritykeyvaultsecretsmodelskeyvaultsecret) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.KeyVaultSecret](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretkeyvaultsecret) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getId](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetid) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getName](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetname) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetproperties) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getValue](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetvalue) + * [azure.security.keyvault.secrets.models.SecretProperties](#azuresecuritykeyvaultsecretsmodelssecretproperties) + * [azure.security.keyvault.secrets.models.SecretProperties.SecretProperties](#azuresecuritykeyvaultsecretsmodelssecretpropertiessecretproperties) + * [azure.security.keyvault.secrets.models.SecretProperties.getId](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetid) + * [azure.security.keyvault.secrets.models.SecretProperties.getKeyId](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetkeyid) + * [azure.security.keyvault.secrets.models.SecretProperties.getName](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetname) + * [azure.security.keyvault.secrets.models.SecretProperties.getVersion](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetversion) + * [azure.security.keyvault.secrets.SecretClient](#azuresecuritykeyvaultsecretssecretclient) + * [azure.security.keyvault.secrets.SecretClient.SecretClient](#azuresecuritykeyvaultsecretssecretclientsecretclient) + * [azure.security.keyvault.secrets.SecretClient.beginDeleteSecret](#azuresecuritykeyvaultsecretssecretclientbegindeletesecret) + * [azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret](#azuresecuritykeyvaultsecretssecretclientbeginrecoverdeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.getDeletedSecret](#azuresecuritykeyvaultsecretssecretclientgetdeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.getSecret](#azuresecuritykeyvaultsecretssecretclientgetsecret) + * [azure.security.keyvault.secrets.SecretClient.getVaultUrl](#azuresecuritykeyvaultsecretssecretclientgetvaulturl) + * [azure.security.keyvault.secrets.SecretClient.listDeletedSecrets](#azuresecuritykeyvaultsecretssecretclientlistdeletedsecrets) + * [azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets](#azuresecuritykeyvaultsecretssecretclientlistpropertiesofsecrets) + * [azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret](#azuresecuritykeyvaultsecretssecretclientpurgedeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.setSecret](#azuresecuritykeyvaultsecretssecretclientsetsecret) + * [azure.security.keyvault.secrets.SecretClientBuilder](#azuresecuritykeyvaultsecretssecretclientbuilder) + * [azure.security.keyvault.secrets.SecretClientBuilder.SecretClientBuilder](#azuresecuritykeyvaultsecretssecretclientbuildersecretclientbuilder) + * [azure.security.keyvault.secrets.SecretClientBuilder.buildClient](#azuresecuritykeyvaultsecretssecretclientbuilderbuildclient) + * [azure.security.keyvault.secrets.SecretClientBuilder.credential](#azuresecuritykeyvaultsecretssecretclientbuildercredential) + * [azure.security.keyvault.secrets.SecretClientBuilder.httpClient](#azuresecuritykeyvaultsecretssecretclientbuilderhttpclient) + * [azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl](#azuresecuritykeyvaultsecretssecretclientbuildervaulturl) + * [azure.storage](#azurestorage) + * [azure.storage.blob](#azurestorageblob) + * [azure.storage.blob.models](#azurestorageblobmodels) + * [azure.storage.blob.models.BlobContainerItem](#azurestorageblobmodelsblobcontaineritem) + * [azure.storage.blob.models.BlobContainerItem.BlobContainerItem](#azurestorageblobmodelsblobcontaineritemblobcontaineritem) + * [azure.storage.blob.models.BlobContainerItem.getName](#azurestorageblobmodelsblobcontaineritemgetname) + * [azure.storage.blob.models.BlobItem](#azurestorageblobmodelsblobitem) + * [azure.storage.blob.models.BlobItem.BlobItem](#azurestorageblobmodelsblobitemblobitem) + * [azure.storage.blob.models.BlobItem.getMetadata](#azurestorageblobmodelsblobitemgetmetadata) + * [azure.storage.blob.models.BlobItem.getName](#azurestorageblobmodelsblobitemgetname) + * [azure.storage.blob.models.BlobItem.getProperties](#azurestorageblobmodelsblobitemgetproperties) + * [azure.storage.blob.models.BlobItem.getSnapshot](#azurestorageblobmodelsblobitemgetsnapshot) + * [azure.storage.blob.models.BlobItem.getTags](#azurestorageblobmodelsblobitemgettags) + * [azure.storage.blob.models.BlobItem.getVersionId](#azurestorageblobmodelsblobitemgetversionid) + * [azure.storage.blob.models.BlobItem.isDeleted](#azurestorageblobmodelsblobitemisdeleted) + * [azure.storage.blob.models.BlobItem.isPrefix](#azurestorageblobmodelsblobitemisprefix) + * [azure.storage.blob.models.BlobItemProperties](#azurestorageblobmodelsblobitemproperties) + * [azure.storage.blob.models.BlobItemProperties.BlobItemProperties](#azurestorageblobmodelsblobitempropertiesblobitemproperties) + * [azure.storage.blob.models.BlobItemProperties.getCacheControl](#azurestorageblobmodelsblobitempropertiesgetcachecontrol) + * [azure.storage.blob.models.BlobItemProperties.getContentEncoding](#azurestorageblobmodelsblobitempropertiesgetcontentencoding) + * [azure.storage.blob.models.BlobItemProperties.getContentLanguage](#azurestorageblobmodelsblobitempropertiesgetcontentlanguage) + * [azure.storage.blob.models.BlobItemProperties.getContentLength](#azurestorageblobmodelsblobitempropertiesgetcontentlength) + * [azure.storage.blob.models.BlobItemProperties.getContentMd5](#azurestorageblobmodelsblobitempropertiesgetcontentmd5) + * [azure.storage.blob.models.BlobItemProperties.getContentType](#azurestorageblobmodelsblobitempropertiesgetcontenttype) + * [azure.storage.blob.models.BlobListDetails](#azurestorageblobmodelsbloblistdetails) + * [azure.storage.blob.models.BlobListDetails.BlobListDetails](#azurestorageblobmodelsbloblistdetailsbloblistdetails) + * [azure.storage.blob.models.BlobListDetails.getRetrieveCopy](#azurestorageblobmodelsbloblistdetailsgetretrievecopy) + * [azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs](#azurestorageblobmodelsbloblistdetailsgetretrievedeletedblobs) + * [azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions](#azurestorageblobmodelsbloblistdetailsgetretrievedeletedblobswithversions) + * [azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy](#azurestorageblobmodelsbloblistdetailsgetretrieveimmutabilitypolicy) + * [azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold](#azurestorageblobmodelsbloblistdetailsgetretrievelegalhold) + * [azure.storage.blob.models.BlobListDetails.getRetrieveMetadata](#azurestorageblobmodelsbloblistdetailsgetretrievemetadata) + * [azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots](#azurestorageblobmodelsbloblistdetailsgetretrievesnapshots) + * [azure.storage.blob.models.BlobListDetails.getRetrieveTags](#azurestorageblobmodelsbloblistdetailsgetretrievetags) + * [azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs](#azurestorageblobmodelsbloblistdetailsgetretrieveuncommittedblobs) + * [azure.storage.blob.models.BlobListDetails.getRetrieveVersions](#azurestorageblobmodelsbloblistdetailsgetretrieveversions) + * [azure.storage.blob.models.BlobListDetails.setRetrieveCopy](#azurestorageblobmodelsbloblistdetailssetretrievecopy) + * [azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs](#azurestorageblobmodelsbloblistdetailssetretrievedeletedblobs) + * [azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions](#azurestorageblobmodelsbloblistdetailssetretrievedeletedblobswithversions) + * [azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy](#azurestorageblobmodelsbloblistdetailssetretrieveimmutabilitypolicy) + * [azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold](#azurestorageblobmodelsbloblistdetailssetretrievelegalhold) + * [azure.storage.blob.models.BlobListDetails.setRetrieveMetadata](#azurestorageblobmodelsbloblistdetailssetretrievemetadata) + * [azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots](#azurestorageblobmodelsbloblistdetailssetretrievesnapshots) + * [azure.storage.blob.models.BlobListDetails.setRetrieveTags](#azurestorageblobmodelsbloblistdetailssetretrievetags) + * [azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs](#azurestorageblobmodelsbloblistdetailssetretrieveuncommittedblobs) + * [azure.storage.blob.models.BlobListDetails.setRetrieveVersions](#azurestorageblobmodelsbloblistdetailssetretrieveversions) + * [azure.storage.blob.models.BlobProperties](#azurestorageblobmodelsblobproperties) + * [azure.storage.blob.models.BlobProperties.BlobProperties](#azurestorageblobmodelsblobpropertiesblobproperties) + * [azure.storage.blob.models.BlobProperties.getBlobSize](#azurestorageblobmodelsblobpropertiesgetblobsize) + * [azure.storage.blob.models.BlobProperties.getCacheControl](#azurestorageblobmodelsblobpropertiesgetcachecontrol) + * [azure.storage.blob.models.BlobProperties.getContentEncoding](#azurestorageblobmodelsblobpropertiesgetcontentencoding) + * [azure.storage.blob.models.BlobProperties.getContentLanguage](#azurestorageblobmodelsblobpropertiesgetcontentlanguage) + * [azure.storage.blob.models.BlobProperties.getContentMd5](#azurestorageblobmodelsblobpropertiesgetcontentmd5) + * [azure.storage.blob.models.BlobProperties.getContentType](#azurestorageblobmodelsblobpropertiesgetcontenttype) + * [azure.storage.blob.models.ListBlobsOptions](#azurestorageblobmodelslistblobsoptions) + * [azure.storage.blob.models.ListBlobsOptions.ListBlobsOptions](#azurestorageblobmodelslistblobsoptionslistblobsoptions) + * [azure.storage.blob.models.ListBlobsOptions.getDetails](#azurestorageblobmodelslistblobsoptionsgetdetails) + * [azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage](#azurestorageblobmodelslistblobsoptionsgetmaxresultsperpage) + * [azure.storage.blob.models.ListBlobsOptions.getPrefix](#azurestorageblobmodelslistblobsoptionsgetprefix) + * [azure.storage.blob.models.ListBlobsOptions.setDetails](#azurestorageblobmodelslistblobsoptionssetdetails) + * [azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage](#azurestorageblobmodelslistblobsoptionssetmaxresultsperpage) + * [azure.storage.blob.models.ListBlobsOptions.setPrefix](#azurestorageblobmodelslistblobsoptionssetprefix) + * [azure.storage.blob.models.StorageAccountInfo](#azurestorageblobmodelsstorageaccountinfo) + * [azure.storage.blob.models.StorageAccountInfo.StorageAccountInfo](#azurestorageblobmodelsstorageaccountinfostorageaccountinfo) + * [azure.storage.blob.models.StorageAccountInfo.getAccountKind](#azurestorageblobmodelsstorageaccountinfogetaccountkind) + * [azure.storage.blob.models.UserDelegationKey](#azurestorageblobmodelsuserdelegationkey) + * [azure.storage.blob.models.UserDelegationKey.UserDelegationKey](#azurestorageblobmodelsuserdelegationkeyuserdelegationkey) + * [azure.storage.blob.models.UserDelegationKey.getSignedExpiry](#azurestorageblobmodelsuserdelegationkeygetsignedexpiry) + * [azure.storage.blob.models.UserDelegationKey.getSignedStart](#azurestorageblobmodelsuserdelegationkeygetsignedstart) + * [azure.storage.blob.sas](#azurestorageblobsas) + * [azure.storage.blob.sas.BlobContainerSasPermission](#azurestorageblobsasblobcontainersaspermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.BlobContainerSasPermission](#azurestorageblobsasblobcontainersaspermissionblobcontainersaspermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission](#azurestorageblobsasblobcontainersaspermissionhasaddpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission](#azurestorageblobsasblobcontainersaspermissionhascreatepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission](#azurestorageblobsasblobcontainersaspermissionhasdeletepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission](#azurestorageblobsasblobcontainersaspermissionhaslistpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission](#azurestorageblobsasblobcontainersaspermissionhasreadpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission](#azurestorageblobsasblobcontainersaspermissionhaswritepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.parse](#azurestorageblobsasblobcontainersaspermissionparse) + * [azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission](#azurestorageblobsasblobcontainersaspermissionsetaddpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission](#azurestorageblobsasblobcontainersaspermissionsetcreatepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission](#azurestorageblobsasblobcontainersaspermissionsetdeletepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setListPermission](#azurestorageblobsasblobcontainersaspermissionsetlistpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission](#azurestorageblobsasblobcontainersaspermissionsetreadpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission](#azurestorageblobsasblobcontainersaspermissionsetwritepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.toString](#azurestorageblobsasblobcontainersaspermissiontostring) + * [azure.storage.blob.sas.BlobSasPermission](#azurestorageblobsasblobsaspermission) + * [azure.storage.blob.sas.BlobSasPermission.BlobSasPermission](#azurestorageblobsasblobsaspermissionblobsaspermission) + * [azure.storage.blob.sas.BlobSasPermission.hasAddPermission](#azurestorageblobsasblobsaspermissionhasaddpermission) + * [azure.storage.blob.sas.BlobSasPermission.hasCreatePermission](#azurestorageblobsasblobsaspermissionhascreatepermission) + * [azure.storage.blob.sas.BlobSasPermission.hasDeletePermission](#azurestorageblobsasblobsaspermissionhasdeletepermission) + * [azure.storage.blob.sas.BlobSasPermission.hasReadPermission](#azurestorageblobsasblobsaspermissionhasreadpermission) + * [azure.storage.blob.sas.BlobSasPermission.hasWritePermission](#azurestorageblobsasblobsaspermissionhaswritepermission) + * [azure.storage.blob.sas.BlobSasPermission.parse](#azurestorageblobsasblobsaspermissionparse) + * [azure.storage.blob.sas.BlobSasPermission.setAddPermission](#azurestorageblobsasblobsaspermissionsetaddpermission) + * [azure.storage.blob.sas.BlobSasPermission.setCreatePermission](#azurestorageblobsasblobsaspermissionsetcreatepermission) + * [azure.storage.blob.sas.BlobSasPermission.setDeletePermission](#azurestorageblobsasblobsaspermissionsetdeletepermission) + * [azure.storage.blob.sas.BlobSasPermission.setReadPermission](#azurestorageblobsasblobsaspermissionsetreadpermission) + * [azure.storage.blob.sas.BlobSasPermission.setWritePermission](#azurestorageblobsasblobsaspermissionsetwritepermission) + * [azure.storage.blob.sas.BlobSasPermission.toString](#azurestorageblobsasblobsaspermissiontostring) + * [azure.storage.blob.sas.BlobServiceSasSignatureValues](#azurestorageblobsasblobservicesassignaturevalues) + * [azure.storage.blob.sas.BlobServiceSasSignatureValues.BlobServiceSasSignatureValues](#azurestorageblobsasblobservicesassignaturevaluesblobservicesassignaturevalues) + * [azure.storage.blob.specialized](#azurestorageblobspecialized) + * [azure.storage.blob.specialized.BlobLeaseClient](#azurestorageblobspecializedblobleaseclient) + * [azure.storage.blob.specialized.BlobLeaseClient.BlobLeaseClient](#azurestorageblobspecializedblobleaseclientblobleaseclient) + * [azure.storage.blob.specialized.BlobLeaseClient.acquireLease](#azurestorageblobspecializedblobleaseclientacquirelease) + * [azure.storage.blob.specialized.BlobLeaseClient.breakLease](#azurestorageblobspecializedblobleaseclientbreaklease) + * [azure.storage.blob.specialized.BlobLeaseClient.changeLease](#azurestorageblobspecializedblobleaseclientchangelease) + * [azure.storage.blob.specialized.BlobLeaseClient.getLeaseId](#azurestorageblobspecializedblobleaseclientgetleaseid) + * [azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl](#azurestorageblobspecializedblobleaseclientgetresourceurl) + * [azure.storage.blob.specialized.BlobLeaseClient.releaseLease](#azurestorageblobspecializedblobleaseclientreleaselease) + * [azure.storage.blob.specialized.BlobLeaseClient.renewLease](#azurestorageblobspecializedblobleaseclientrenewlease) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder](#azurestorageblobspecializedblobleaseclientbuilder) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.BlobLeaseClientBuilder](#azurestorageblobspecializedblobleaseclientbuilderblobleaseclientbuilder) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient](#azurestorageblobspecializedblobleaseclientbuilderblobclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient](#azurestorageblobspecializedblobleaseclientbuilderbuildclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient](#azurestorageblobspecializedblobleaseclientbuildercontainerclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId](#azurestorageblobspecializedblobleaseclientbuilderleaseid) + * [azure.storage.blob.BlobClient](#azurestorageblobblobclient) + * [azure.storage.blob.BlobClient.BlobClient](#azurestorageblobblobclientblobclient) + * [azure.storage.blob.BlobClient.copyFromUrl](#azurestorageblobblobclientcopyfromurl) + * [azure.storage.blob.BlobClient.delete](#azurestorageblobblobclientdelete) + * [azure.storage.blob.BlobClient.deleteBlob](#azurestorageblobblobclientdeleteblob) + * [azure.storage.blob.BlobClient.downloadToFile](#azurestorageblobblobclientdownloadtofile) + * [azure.storage.blob.BlobClient.exists](#azurestorageblobblobclientexists) + * [azure.storage.blob.BlobClient.generateSas](#azurestorageblobblobclientgeneratesas) + * [azure.storage.blob.BlobClient.generateUserDelegationSas](#azurestorageblobblobclientgenerateuserdelegationsas) + * [azure.storage.blob.BlobClient.getAccountName](#azurestorageblobblobclientgetaccountname) + * [azure.storage.blob.BlobClient.getBlobUrl](#azurestorageblobblobclientgetbloburl) + * [azure.storage.blob.BlobClient.getContainerClient](#azurestorageblobblobclientgetcontainerclient) + * [azure.storage.blob.BlobClient.getProperties](#azurestorageblobblobclientgetproperties) + * [azure.storage.blob.BlobClient.uploadFromFile](#azurestorageblobblobclientuploadfromfile) + * [azure.storage.blob.BlobClientBuilder](#azurestorageblobblobclientbuilder) + * [azure.storage.blob.BlobClientBuilder.BlobClientBuilder](#azurestorageblobblobclientbuilderblobclientbuilder) + * [azure.storage.blob.BlobClientBuilder.blobName](#azurestorageblobblobclientbuilderblobname) + * [azure.storage.blob.BlobClientBuilder.buildClient](#azurestorageblobblobclientbuilderbuildclient) + * [azure.storage.blob.BlobClientBuilder.connectionString](#azurestorageblobblobclientbuilderconnectionstring) + * [azure.storage.blob.BlobClientBuilder.containerName](#azurestorageblobblobclientbuildercontainername) + * [azure.storage.blob.BlobClientBuilder.credential](#azurestorageblobblobclientbuildercredential) + * [azure.storage.blob.BlobClientBuilder.endpoint](#azurestorageblobblobclientbuilderendpoint) + * [azure.storage.blob.BlobClientBuilder.httpClient](#azurestorageblobblobclientbuilderhttpclient) + * [azure.storage.blob.BlobClientBuilder.sasToken](#azurestorageblobblobclientbuildersastoken) + * [azure.storage.blob.BlobClientBuilder.setAnonymousAccess](#azurestorageblobblobclientbuildersetanonymousaccess) + * [azure.storage.blob.BlobContainerClient](#azurestorageblobblobcontainerclient) + * [azure.storage.blob.BlobContainerClient.BlobContainerClient](#azurestorageblobblobcontainerclientblobcontainerclient) + * [azure.storage.blob.BlobContainerClient.create](#azurestorageblobblobcontainerclientcreate) + * [azure.storage.blob.BlobContainerClient.delete](#azurestorageblobblobcontainerclientdelete) + * [azure.storage.blob.BlobContainerClient.deleteContainer](#azurestorageblobblobcontainerclientdeletecontainer) + * [azure.storage.blob.BlobContainerClient.exists](#azurestorageblobblobcontainerclientexists) + * [azure.storage.blob.BlobContainerClient.generateUserDelegationSas](#azurestorageblobblobcontainerclientgenerateuserdelegationsas) + * [azure.storage.blob.BlobContainerClient.getAccountName](#azurestorageblobblobcontainerclientgetaccountname) + * [azure.storage.blob.BlobContainerClient.getAccountUrl](#azurestorageblobblobcontainerclientgetaccounturl) + * [azure.storage.blob.BlobContainerClient.getBlobClient](#azurestorageblobblobcontainerclientgetblobclient) + * [azure.storage.blob.BlobContainerClient.getBlobContainerName](#azurestorageblobblobcontainerclientgetblobcontainername) + * [azure.storage.blob.BlobContainerClient.getBlobContainerUrl](#azurestorageblobblobcontainerclientgetblobcontainerurl) + * [azure.storage.blob.BlobContainerClient.getServiceClient](#azurestorageblobblobcontainerclientgetserviceclient) + * [azure.storage.blob.BlobContainerClient.listBlobs](#azurestorageblobblobcontainerclientlistblobs) + * [azure.storage.blob.BlobContainerClient.listBlobsByHierarchy](#azurestorageblobblobcontainerclientlistblobsbyhierarchy) + * [azure.storage.blob.BlobContainerClientBuilder](#azurestorageblobblobcontainerclientbuilder) + * [azure.storage.blob.BlobContainerClientBuilder.BlobContainerClientBuilder](#azurestorageblobblobcontainerclientbuilderblobcontainerclientbuilder) + * [azure.storage.blob.BlobContainerClientBuilder.buildClient](#azurestorageblobblobcontainerclientbuilderbuildclient) + * [azure.storage.blob.BlobContainerClientBuilder.connectionString](#azurestorageblobblobcontainerclientbuilderconnectionstring) + * [azure.storage.blob.BlobContainerClientBuilder.containerName](#azurestorageblobblobcontainerclientbuildercontainername) + * [azure.storage.blob.BlobContainerClientBuilder.credential](#azurestorageblobblobcontainerclientbuildercredential) + * [azure.storage.blob.BlobContainerClientBuilder.endpoint](#azurestorageblobblobcontainerclientbuilderendpoint) + * [azure.storage.blob.BlobContainerClientBuilder.httpClient](#azurestorageblobblobcontainerclientbuilderhttpclient) + * [azure.storage.blob.BlobContainerClientBuilder.sasToken](#azurestorageblobblobcontainerclientbuildersastoken) + * [azure.storage.blob.BlobServiceClient](#azurestorageblobblobserviceclient) + * [azure.storage.blob.BlobServiceClient.BlobServiceClient](#azurestorageblobblobserviceclientblobserviceclient) + * [azure.storage.blob.BlobServiceClient.createBlobContainer](#azurestorageblobblobserviceclientcreateblobcontainer) + * [azure.storage.blob.BlobServiceClient.deleteBlobContainer](#azurestorageblobblobserviceclientdeleteblobcontainer) + * [azure.storage.blob.BlobServiceClient.generateAccountSas](#azurestorageblobblobserviceclientgenerateaccountsas) + * [azure.storage.blob.BlobServiceClient.getAccountInfo](#azurestorageblobblobserviceclientgetaccountinfo) + * [azure.storage.blob.BlobServiceClient.getAccountName](#azurestorageblobblobserviceclientgetaccountname) + * [azure.storage.blob.BlobServiceClient.getAccountUrl](#azurestorageblobblobserviceclientgetaccounturl) + * [azure.storage.blob.BlobServiceClient.getUserDelegationKey](#azurestorageblobblobserviceclientgetuserdelegationkey) + * [azure.storage.blob.BlobServiceClient.listBlobContainers](#azurestorageblobblobserviceclientlistblobcontainers) + * [azure.storage.blob.BlobServiceClient.setAnonymousAccess](#azurestorageblobblobserviceclientsetanonymousaccess) + * [azure.storage.blob.BlobServiceClientBuilder](#azurestorageblobblobserviceclientbuilder) + * [azure.storage.blob.BlobServiceClientBuilder.BlobServiceClientBuilder](#azurestorageblobblobserviceclientbuilderblobserviceclientbuilder) + * [azure.storage.blob.BlobServiceClientBuilder.buildClient](#azurestorageblobblobserviceclientbuilderbuildclient) + * [azure.storage.blob.BlobServiceClientBuilder.connectionString](#azurestorageblobblobserviceclientbuilderconnectionstring) + * [azure.storage.blob.BlobServiceClientBuilder.credential](#azurestorageblobblobserviceclientbuildercredential) + * [azure.storage.blob.BlobServiceClientBuilder.endpoint](#azurestorageblobblobserviceclientbuilderendpoint) + * [azure.storage.blob.BlobServiceClientBuilder.httpClient](#azurestorageblobblobserviceclientbuilderhttpclient) + * [azure.storage.blob.BlobServiceClientBuilder.retryOptions](#azurestorageblobblobserviceclientbuilderretryoptions) + * [azure.storage.blob.BlobServiceClientBuilder.sasToken](#azurestorageblobblobserviceclientbuildersastoken) + * [azure.storage.common](#azurestoragecommon) + * [azure.storage.common.policy](#azurestoragecommonpolicy) + * [azure.storage.common.policy.RequestRetryOptions](#azurestoragecommonpolicyrequestretryoptions) + * [azure.storage.common.policy.RequestRetryOptions.RequestRetryOptions](#azurestoragecommonpolicyrequestretryoptionsrequestretryoptions) + * [azure.storage.common.policy.RetryPolicyType](#azurestoragecommonpolicyretrypolicytype) + * [azure.storage.common.policy.RetryPolicyType.RetryPolicyType](#azurestoragecommonpolicyretrypolicytyperetrypolicytype) + * [azure.storage.common.policy.RetryPolicyType.toJava](#azurestoragecommonpolicyretrypolicytypetojava) + * [azure.storage.common.policy.RetryPolicyType.toString](#azurestoragecommonpolicyretrypolicytypetostring) + * [azure.storage.common.policy.RetryPolicyType.valueOf](#azurestoragecommonpolicyretrypolicytypevalueof) + * [azure.storage.common.sas](#azurestoragecommonsas) + * [azure.storage.common.sas.AccountSasPermission](#azurestoragecommonsasaccountsaspermission) + * [azure.storage.common.sas.AccountSasPermission.AccountSasPermission](#azurestoragecommonsasaccountsaspermissionaccountsaspermission) + * [azure.storage.common.sas.AccountSasPermission.hasAddPermission](#azurestoragecommonsasaccountsaspermissionhasaddpermission) + * [azure.storage.common.sas.AccountSasPermission.hasCreatePermission](#azurestoragecommonsasaccountsaspermissionhascreatepermission) + * [azure.storage.common.sas.AccountSasPermission.hasDeletePermission](#azurestoragecommonsasaccountsaspermissionhasdeletepermission) + * [azure.storage.common.sas.AccountSasPermission.hasListPermission](#azurestoragecommonsasaccountsaspermissionhaslistpermission) + * [azure.storage.common.sas.AccountSasPermission.hasProcessMessages](#azurestoragecommonsasaccountsaspermissionhasprocessmessages) + * [azure.storage.common.sas.AccountSasPermission.hasReadPermission](#azurestoragecommonsasaccountsaspermissionhasreadpermission) + * [azure.storage.common.sas.AccountSasPermission.hasUpdatePermission](#azurestoragecommonsasaccountsaspermissionhasupdatepermission) + * [azure.storage.common.sas.AccountSasPermission.hasWritePermission](#azurestoragecommonsasaccountsaspermissionhaswritepermission) + * [azure.storage.common.sas.AccountSasPermission.parse](#azurestoragecommonsasaccountsaspermissionparse) + * [azure.storage.common.sas.AccountSasPermission.setAddPermission](#azurestoragecommonsasaccountsaspermissionsetaddpermission) + * [azure.storage.common.sas.AccountSasPermission.setCreatePermission](#azurestoragecommonsasaccountsaspermissionsetcreatepermission) + * [azure.storage.common.sas.AccountSasPermission.setDeletePermission](#azurestoragecommonsasaccountsaspermissionsetdeletepermission) + * [azure.storage.common.sas.AccountSasPermission.setListPermission](#azurestoragecommonsasaccountsaspermissionsetlistpermission) + * [azure.storage.common.sas.AccountSasPermission.setProcessMessages](#azurestoragecommonsasaccountsaspermissionsetprocessmessages) + * [azure.storage.common.sas.AccountSasPermission.setReadPermission](#azurestoragecommonsasaccountsaspermissionsetreadpermission) + * [azure.storage.common.sas.AccountSasPermission.setUpdatePermission](#azurestoragecommonsasaccountsaspermissionsetupdatepermission) + * [azure.storage.common.sas.AccountSasPermission.setWritePermission](#azurestoragecommonsasaccountsaspermissionsetwritepermission) + * [azure.storage.common.sas.AccountSasPermission.toString](#azurestoragecommonsasaccountsaspermissiontostring) + * [azure.storage.common.sas.AccountSasResourceType](#azurestoragecommonsasaccountsasresourcetype) + * [azure.storage.common.sas.AccountSasResourceType.AccountSasResourceType](#azurestoragecommonsasaccountsasresourcetypeaccountsasresourcetype) + * [azure.storage.common.sas.AccountSasResourceType.isContainer](#azurestoragecommonsasaccountsasresourcetypeiscontainer) + * [azure.storage.common.sas.AccountSasResourceType.isObject](#azurestoragecommonsasaccountsasresourcetypeisobject) + * [azure.storage.common.sas.AccountSasResourceType.isService](#azurestoragecommonsasaccountsasresourcetypeisservice) + * [azure.storage.common.sas.AccountSasResourceType.parse](#azurestoragecommonsasaccountsasresourcetypeparse) + * [azure.storage.common.sas.AccountSasResourceType.setContainer](#azurestoragecommonsasaccountsasresourcetypesetcontainer) + * [azure.storage.common.sas.AccountSasResourceType.setObject](#azurestoragecommonsasaccountsasresourcetypesetobject) + * [azure.storage.common.sas.AccountSasResourceType.setService](#azurestoragecommonsasaccountsasresourcetypesetservice) + * [azure.storage.common.sas.AccountSasResourceType.toString](#azurestoragecommonsasaccountsasresourcetypetostring) + * [azure.storage.common.sas.AccountSasService](#azurestoragecommonsasaccountsasservice) + * [azure.storage.common.sas.AccountSasService.AccountSasService](#azurestoragecommonsasaccountsasserviceaccountsasservice) + * [azure.storage.common.sas.AccountSasService.hasBlobAccess](#azurestoragecommonsasaccountsasservicehasblobaccess) + * [azure.storage.common.sas.AccountSasService.hasFileAccess](#azurestoragecommonsasaccountsasservicehasfileaccess) + * [azure.storage.common.sas.AccountSasService.hasQueueAccess](#azurestoragecommonsasaccountsasservicehasqueueaccess) + * [azure.storage.common.sas.AccountSasService.hasTableAccess](#azurestoragecommonsasaccountsasservicehastableaccess) + * [azure.storage.common.sas.AccountSasService.parse](#azurestoragecommonsasaccountsasserviceparse) + * [azure.storage.common.sas.AccountSasService.setBlobAccess](#azurestoragecommonsasaccountsasservicesetblobaccess) + * [azure.storage.common.sas.AccountSasService.setFileAccess](#azurestoragecommonsasaccountsasservicesetfileaccess) + * [azure.storage.common.sas.AccountSasService.setQueueAccess](#azurestoragecommonsasaccountsasservicesetqueueaccess) + * [azure.storage.common.sas.AccountSasService.setTableAccess](#azurestoragecommonsasaccountsasservicesettableaccess) + * [azure.storage.common.sas.AccountSasService.toString](#azurestoragecommonsasaccountsasservicetostring) + * [azure.storage.common.sas.AccountSasSignatureValues](#azurestoragecommonsasaccountsassignaturevalues) + * [azure.storage.common.sas.AccountSasSignatureValues.AccountSasSignatureValues](#azurestoragecommonsasaccountsassignaturevaluesaccountsassignaturevalues) + * [azure.storage.common.StorageSharedKeyCredential](#azurestoragecommonstoragesharedkeycredential) + * [azure.storage.common.StorageSharedKeyCredential.StorageSharedKeyCredential](#azurestoragecommonstoragesharedkeycredentialstoragesharedkeycredential) + * [azure.storage.common.StorageSharedKeyCredential.getAccountName](#azurestoragecommonstoragesharedkeycredentialgetaccountname) + * [azure.storage.file](#azurestoragefile) + * [azure.storage.file.datalake](#azurestoragefiledatalake) + * [azure.storage.file.datalake.models](#azurestoragefiledatalakemodels) + * [azure.storage.file.datalake.models.PathItem](#azurestoragefiledatalakemodelspathitem) + * [azure.storage.file.datalake.models.PathItem.PathItem](#azurestoragefiledatalakemodelspathitempathitem) + * [azure.storage.file.datalake.models.PathItem.getName](#azurestoragefiledatalakemodelspathitemgetname) + * [azure.storage.file.datalake.models.PathItem.isDirectory](#azurestoragefiledatalakemodelspathitemisdirectory) + * [azure.storage.file.datalake.models.PathProperties](#azurestoragefiledatalakemodelspathproperties) + * [azure.storage.file.datalake.models.PathProperties.PathProperties](#azurestoragefiledatalakemodelspathpropertiespathproperties) + * [azure.storage.file.datalake.sas](#azurestoragefiledatalakesas) + * [azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues](#azurestoragefiledatalakesasdatalakeservicesassignaturevalues) + * [azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues.DataLakeServiceSasSignatureValues](#azurestoragefiledatalakesasdatalakeservicesassignaturevaluesdatalakeservicesassignaturevalues) + * [azure.storage.file.datalake.sas.FileSystemSasPermission](#azurestoragefiledatalakesasfilesystemsaspermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.FileSystemSasPermission](#azurestoragefiledatalakesasfilesystemsaspermissionfilesystemsaspermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasaddpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhascreatepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasdeletepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasexecutepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhaslistpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmanageownershippermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmovepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasreadpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhaswritepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.parse](#azurestoragefiledatalakesasfilesystemsaspermissionparse) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetaddpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetcreatepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetdeletepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetexecutepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetlistpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmanageownershippermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmovepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetreadpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetwritepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.toString](#azurestoragefiledatalakesasfilesystemsaspermissiontostring) + * [azure.storage.file.datalake.sas.PathSasPermission](#azurestoragefiledatalakesaspathsaspermission) + * [azure.storage.file.datalake.sas.PathSasPermission.PathSasPermission](#azurestoragefiledatalakesaspathsaspermissionpathsaspermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission](#azurestoragefiledatalakesaspathsaspermissionhasaddpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission](#azurestoragefiledatalakesaspathsaspermissionhascreatepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission](#azurestoragefiledatalakesaspathsaspermissionhasdeletepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission](#azurestoragefiledatalakesaspathsaspermissionhasexecutepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasListPermission](#azurestoragefiledatalakesaspathsaspermissionhaslistpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission](#azurestoragefiledatalakesaspathsaspermissionhasmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission](#azurestoragefiledatalakesaspathsaspermissionhasmanageownershippermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission](#azurestoragefiledatalakesaspathsaspermissionhasmovepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission](#azurestoragefiledatalakesaspathsaspermissionhasreadpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission](#azurestoragefiledatalakesaspathsaspermissionhaswritepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.parse](#azurestoragefiledatalakesaspathsaspermissionparse) + * [azure.storage.file.datalake.sas.PathSasPermission.setAddPermission](#azurestoragefiledatalakesaspathsaspermissionsetaddpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission](#azurestoragefiledatalakesaspathsaspermissionsetcreatepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission](#azurestoragefiledatalakesaspathsaspermissionsetdeletepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission](#azurestoragefiledatalakesaspathsaspermissionsetexecutepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setListPermission](#azurestoragefiledatalakesaspathsaspermissionsetlistpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission](#azurestoragefiledatalakesaspathsaspermissionsetmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission](#azurestoragefiledatalakesaspathsaspermissionsetmanageownershippermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setMovePermission](#azurestoragefiledatalakesaspathsaspermissionsetmovepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setReadPermission](#azurestoragefiledatalakesaspathsaspermissionsetreadpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setWritePermission](#azurestoragefiledatalakesaspathsaspermissionsetwritepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.toString](#azurestoragefiledatalakesaspathsaspermissiontostring) + * [azure.storage.file.datalake.DataLakeDirectoryClient](#azurestoragefiledatalakedatalakedirectoryclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.DataLakeDirectoryClient](#azurestoragefiledatalakedatalakedirectoryclientdatalakedirectoryclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.createFile](#azurestoragefiledatalakedatalakedirectoryclientcreatefile) + * [azure.storage.file.datalake.DataLakeDirectoryClient.delete](#azurestoragefiledatalakedatalakedirectoryclientdelete) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory](#azurestoragefiledatalakedatalakedirectoryclientdeletedirectory) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile](#azurestoragefiledatalakedatalakedirectoryclientdeletefile) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory](#azurestoragefiledatalakedatalakedirectoryclientdeletesubdirectory) + * [azure.storage.file.datalake.DataLakeDirectoryClient.exists](#azurestoragefiledatalakedatalakedirectoryclientexists) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath](#azurestoragefiledatalakedatalakedirectoryclientgetdirectorypath) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl](#azurestoragefiledatalakedatalakedirectoryclientgetdirectoryurl) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient](#azurestoragefiledatalakedatalakedirectoryclientgetfileclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.listPaths](#azurestoragefiledatalakedatalakedirectoryclientlistpaths) + * [azure.storage.file.datalake.DataLakeDirectoryClient.rename](#azurestoragefiledatalakedatalakedirectoryclientrename) + * [azure.storage.file.datalake.DataLakeFileClient](#azurestoragefiledatalakedatalakefileclient) + * [azure.storage.file.datalake.DataLakeFileClient.DataLakeFileClient](#azurestoragefiledatalakedatalakefileclientdatalakefileclient) + * [azure.storage.file.datalake.DataLakeFileClient.delete](#azurestoragefiledatalakedatalakefileclientdelete) + * [azure.storage.file.datalake.DataLakeFileClient.deleteFile](#azurestoragefiledatalakedatalakefileclientdeletefile) + * [azure.storage.file.datalake.DataLakeFileClient.exists](#azurestoragefiledatalakedatalakefileclientexists) + * [azure.storage.file.datalake.DataLakeFileClient.getFilePath](#azurestoragefiledatalakedatalakefileclientgetfilepath) + * [azure.storage.file.datalake.DataLakeFileClient.getFileUrl](#azurestoragefiledatalakedatalakefileclientgetfileurl) + * [azure.storage.file.datalake.DataLakeFileClient.readToFile](#azurestoragefiledatalakedatalakefileclientreadtofile) + * [azure.storage.file.datalake.DataLakeFileClient.rename](#azurestoragefiledatalakedatalakefileclientrename) + * [azure.storage.file.datalake.DataLakeFileClient.uploadFromFile](#azurestoragefiledatalakedatalakefileclientuploadfromfile) + * [azure.storage.file.datalake.DataLakeFileSystemClient](#azurestoragefiledatalakedatalakefilesystemclient) + * [azure.storage.file.datalake.DataLakeFileSystemClient.DataLakeFileSystemClient](#azurestoragefiledatalakedatalakefilesystemclientdatalakefilesystemclient) + * [azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory](#azurestoragefiledatalakedatalakefilesystemclientcreatedirectory) + * [azure.storage.file.datalake.DataLakeFileSystemClient.delete](#azurestoragefiledatalakedatalakefilesystemclientdelete) + * [azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory](#azurestoragefiledatalakedatalakefilesystemclientdeletedirectory) + * [azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile](#azurestoragefiledatalakedatalakefilesystemclientdeletefile) + * [azure.storage.file.datalake.DataLakeFileSystemClient.generateSas](#azurestoragefiledatalakedatalakefilesystemclientgeneratesas) + * [azure.storage.file.datalake.DataLakeFileSystemClient.listPaths](#azurestoragefiledatalakedatalakefilesystemclientlistpaths) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder](#azurestoragefiledatalakedatalakefilesystemclientbuilder) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.DataLakeFileSystemClientBuilder](#azurestoragefiledatalakedatalakefilesystemclientbuilderdatalakefilesystemclientbuilder) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient](#azurestoragefiledatalakedatalakefilesystemclientbuilderbuildclient) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential](#azurestoragefiledatalakedatalakefilesystemclientbuildercredential) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint](#azurestoragefiledatalakedatalakefilesystemclientbuilderendpoint) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName](#azurestoragefiledatalakedatalakefilesystemclientbuilderfilesystemname) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient](#azurestoragefiledatalakedatalakefilesystemclientbuilderhttpclient) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken](#azurestoragefiledatalakedatalakefilesystemclientbuildersastoken) + * [azure.storage.file.datalake.DataLakePathClientBuilder](#azurestoragefiledatalakedatalakepathclientbuilder) + * [azure.storage.file.datalake.DataLakePathClientBuilder.DataLakePathClientBuilder](#azurestoragefiledatalakedatalakepathclientbuilderdatalakepathclientbuilder) + * [azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient](#azurestoragefiledatalakedatalakepathclientbuilderbuilddirectoryclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient](#azurestoragefiledatalakedatalakepathclientbuilderbuildfileclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.credential](#azurestoragefiledatalakedatalakepathclientbuildercredential) + * [azure.storage.file.datalake.DataLakePathClientBuilder.endpoint](#azurestoragefiledatalakedatalakepathclientbuilderendpoint) + * [azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName](#azurestoragefiledatalakedatalakepathclientbuilderfilesystemname) + * [azure.storage.file.datalake.DataLakePathClientBuilder.httpClient](#azurestoragefiledatalakedatalakepathclientbuilderhttpclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.pathName](#azurestoragefiledatalakedatalakepathclientbuilderpathname) + * [azure.storage.file.datalake.DataLakePathClientBuilder.sasToken](#azurestoragefiledatalakedatalakepathclientbuildersastoken) + * [azure.storage.queue](#azurestoragequeue) + * [azure.storage.queue.models](#azurestoragequeuemodels) + * [azure.storage.queue.models.PeekedMessageItem](#azurestoragequeuemodelspeekedmessageitem) + * [azure.storage.queue.models.PeekedMessageItem.PeekedMessageItem](#azurestoragequeuemodelspeekedmessageitempeekedmessageitem) + * [azure.storage.queue.models.PeekedMessageItem.getDequeueCount](#azurestoragequeuemodelspeekedmessageitemgetdequeuecount) + * [azure.storage.queue.models.PeekedMessageItem.getExpirationTime](#azurestoragequeuemodelspeekedmessageitemgetexpirationtime) + * [azure.storage.queue.models.PeekedMessageItem.getInsertionTime](#azurestoragequeuemodelspeekedmessageitemgetinsertiontime) + * [azure.storage.queue.models.PeekedMessageItem.getMessageId](#azurestoragequeuemodelspeekedmessageitemgetmessageid) + * [azure.storage.queue.models.PeekedMessageItem.getMessageText](#azurestoragequeuemodelspeekedmessageitemgetmessagetext) + * [azure.storage.queue.models.PeekedMessageItem.setDequeueCount](#azurestoragequeuemodelspeekedmessageitemsetdequeuecount) + * [azure.storage.queue.models.PeekedMessageItem.setExpirationTime](#azurestoragequeuemodelspeekedmessageitemsetexpirationtime) + * [azure.storage.queue.models.PeekedMessageItem.setInsertionTime](#azurestoragequeuemodelspeekedmessageitemsetinsertiontime) + * [azure.storage.queue.models.PeekedMessageItem.setMessageId](#azurestoragequeuemodelspeekedmessageitemsetmessageid) + * [azure.storage.queue.models.PeekedMessageItem.setMessageText](#azurestoragequeuemodelspeekedmessageitemsetmessagetext) + * [azure.storage.queue.models.QueueItem](#azurestoragequeuemodelsqueueitem) + * [azure.storage.queue.models.QueueItem.QueueItem](#azurestoragequeuemodelsqueueitemqueueitem) + * [azure.storage.queue.models.QueueItem.getName](#azurestoragequeuemodelsqueueitemgetname) + * [azure.storage.queue.models.QueueMessageItem](#azurestoragequeuemodelsqueuemessageitem) + * [azure.storage.queue.models.QueueMessageItem.QueueMessageItem](#azurestoragequeuemodelsqueuemessageitemqueuemessageitem) + * [azure.storage.queue.models.QueueMessageItem.getDequeueCount](#azurestoragequeuemodelsqueuemessageitemgetdequeuecount) + * [azure.storage.queue.models.QueueMessageItem.getExpirationTime](#azurestoragequeuemodelsqueuemessageitemgetexpirationtime) + * [azure.storage.queue.models.QueueMessageItem.getInsertionTime](#azurestoragequeuemodelsqueuemessageitemgetinsertiontime) + * [azure.storage.queue.models.QueueMessageItem.getMessageId](#azurestoragequeuemodelsqueuemessageitemgetmessageid) + * [azure.storage.queue.models.QueueMessageItem.getMessageText](#azurestoragequeuemodelsqueuemessageitemgetmessagetext) + * [azure.storage.queue.models.QueueMessageItem.getPopReceipt](#azurestoragequeuemodelsqueuemessageitemgetpopreceipt) + * [azure.storage.queue.models.QueueMessageItem.getTimeNextVisible](#azurestoragequeuemodelsqueuemessageitemgettimenextvisible) + * [azure.storage.queue.models.QueueMessageItem.setDequeueCount](#azurestoragequeuemodelsqueuemessageitemsetdequeuecount) + * [azure.storage.queue.models.QueueMessageItem.setExpirationTime](#azurestoragequeuemodelsqueuemessageitemsetexpirationtime) + * [azure.storage.queue.models.QueueMessageItem.setInsertionTime](#azurestoragequeuemodelsqueuemessageitemsetinsertiontime) + * [azure.storage.queue.models.QueueMessageItem.setMessageId](#azurestoragequeuemodelsqueuemessageitemsetmessageid) + * [azure.storage.queue.models.QueueMessageItem.setMessageText](#azurestoragequeuemodelsqueuemessageitemsetmessagetext) + * [azure.storage.queue.models.QueueMessageItem.setPopReceipt](#azurestoragequeuemodelsqueuemessageitemsetpopreceipt) + * [azure.storage.queue.models.QueueMessageItem.setTimeNextVisible](#azurestoragequeuemodelsqueuemessageitemsettimenextvisible) + * [azure.storage.queue.models.QueueProperties](#azurestoragequeuemodelsqueueproperties) + * [azure.storage.queue.models.QueueProperties.QueueProperties](#azurestoragequeuemodelsqueuepropertiesqueueproperties) + * [azure.storage.queue.models.QueueProperties.getApproximateMessageCount](#azurestoragequeuemodelsqueuepropertiesgetapproximatemessagecount) + * [azure.storage.queue.models.SendMessageResult](#azurestoragequeuemodelssendmessageresult) + * [azure.storage.queue.models.SendMessageResult.SendMessageResult](#azurestoragequeuemodelssendmessageresultsendmessageresult) + * [azure.storage.queue.models.SendMessageResult.getExpirationTime](#azurestoragequeuemodelssendmessageresultgetexpirationtime) + * [azure.storage.queue.models.SendMessageResult.getInsertionTime](#azurestoragequeuemodelssendmessageresultgetinsertiontime) + * [azure.storage.queue.models.SendMessageResult.getPopReceipt](#azurestoragequeuemodelssendmessageresultgetpopreceipt) + * [azure.storage.queue.models.SendMessageResult.getTimeNextVisible](#azurestoragequeuemodelssendmessageresultgettimenextvisible) + * [azure.storage.queue.sas](#azurestoragequeuesas) + * [azure.storage.queue.sas.QueueSasPermission](#azurestoragequeuesasqueuesaspermission) + * [azure.storage.queue.sas.QueueSasPermission.QueueSasPermission](#azurestoragequeuesasqueuesaspermissionqueuesaspermission) + * [azure.storage.queue.sas.QueueSasPermission.hasAddPermission](#azurestoragequeuesasqueuesaspermissionhasaddpermission) + * [azure.storage.queue.sas.QueueSasPermission.hasProcessPermission](#azurestoragequeuesasqueuesaspermissionhasprocesspermission) + * [azure.storage.queue.sas.QueueSasPermission.hasReadPermission](#azurestoragequeuesasqueuesaspermissionhasreadpermission) + * [azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission](#azurestoragequeuesasqueuesaspermissionhasupdatepermission) + * [azure.storage.queue.sas.QueueSasPermission.parse](#azurestoragequeuesasqueuesaspermissionparse) + * [azure.storage.queue.sas.QueueSasPermission.setAddPermission](#azurestoragequeuesasqueuesaspermissionsetaddpermission) + * [azure.storage.queue.sas.QueueSasPermission.setProcessPermission](#azurestoragequeuesasqueuesaspermissionsetprocesspermission) + * [azure.storage.queue.sas.QueueSasPermission.setReadPermission](#azurestoragequeuesasqueuesaspermissionsetreadpermission) + * [azure.storage.queue.sas.QueueSasPermission.setUpdatePermission](#azurestoragequeuesasqueuesaspermissionsetupdatepermission) + * [azure.storage.queue.sas.QueueSasPermission.toString](#azurestoragequeuesasqueuesaspermissiontostring) + * [azure.storage.queue.sas.QueueServiceSasSignatureValues](#azurestoragequeuesasqueueservicesassignaturevalues) + * [azure.storage.queue.sas.QueueServiceSasSignatureValues.QueueServiceSasSignatureValues](#azurestoragequeuesasqueueservicesassignaturevaluesqueueservicesassignaturevalues) + * [azure.storage.queue.QueueClient](#azurestoragequeuequeueclient) + * [azure.storage.queue.QueueClient.QueueClient](#azurestoragequeuequeueclientqueueclient) + * [azure.storage.queue.QueueClient.clearMessages](#azurestoragequeuequeueclientclearmessages) + * [azure.storage.queue.QueueClient.create](#azurestoragequeuequeueclientcreate) + * [azure.storage.queue.QueueClient.delete](#azurestoragequeuequeueclientdelete) + * [azure.storage.queue.QueueClient.deleteMessage](#azurestoragequeuequeueclientdeletemessage) + * [azure.storage.queue.QueueClient.deleteQueue](#azurestoragequeuequeueclientdeletequeue) + * [azure.storage.queue.QueueClient.generateSas](#azurestoragequeuequeueclientgeneratesas) + * [azure.storage.queue.QueueClient.getAccountName](#azurestoragequeuequeueclientgetaccountname) + * [azure.storage.queue.QueueClient.getQueueName](#azurestoragequeuequeueclientgetqueuename) + * [azure.storage.queue.QueueClient.getQueueUrl](#azurestoragequeuequeueclientgetqueueurl) + * [azure.storage.queue.QueueClient.peekMessage](#azurestoragequeuequeueclientpeekmessage) + * [azure.storage.queue.QueueClient.receiveMessage](#azurestoragequeuequeueclientreceivemessage) + * [azure.storage.queue.QueueClient.receiveMessages](#azurestoragequeuequeueclientreceivemessages) + * [azure.storage.queue.QueueClient.sendMessage](#azurestoragequeuequeueclientsendmessage) + * [azure.storage.queue.QueueClientBuilder](#azurestoragequeuequeueclientbuilder) + * [azure.storage.queue.QueueClientBuilder.QueueClientBuilder](#azurestoragequeuequeueclientbuilderqueueclientbuilder) + * [azure.storage.queue.QueueClientBuilder.buildClient](#azurestoragequeuequeueclientbuilderbuildclient) + * [azure.storage.queue.QueueClientBuilder.connectionString](#azurestoragequeuequeueclientbuilderconnectionstring) + * [azure.storage.queue.QueueClientBuilder.credential](#azurestoragequeuequeueclientbuildercredential) + * [azure.storage.queue.QueueClientBuilder.endpoint](#azurestoragequeuequeueclientbuilderendpoint) + * [azure.storage.queue.QueueClientBuilder.httpClient](#azurestoragequeuequeueclientbuilderhttpclient) + * [azure.storage.queue.QueueClientBuilder.queueName](#azurestoragequeuequeueclientbuilderqueuename) + * [azure.storage.queue.QueueClientBuilder.sasToken](#azurestoragequeuequeueclientbuildersastoken) + * [azure.storage.queue.QueueServiceClient](#azurestoragequeuequeueserviceclient) + * [azure.storage.queue.QueueServiceClient.QueueServiceClient](#azurestoragequeuequeueserviceclientqueueserviceclient) + * [azure.storage.queue.QueueServiceClient.createQueue](#azurestoragequeuequeueserviceclientcreatequeue) + * [azure.storage.queue.QueueServiceClient.deleteQueue](#azurestoragequeuequeueserviceclientdeletequeue) + * [azure.storage.queue.QueueServiceClient.generateAccountSas](#azurestoragequeuequeueserviceclientgenerateaccountsas) + * [azure.storage.queue.QueueServiceClient.getAccountName](#azurestoragequeuequeueserviceclientgetaccountname) + * [azure.storage.queue.QueueServiceClient.getQueueClient](#azurestoragequeuequeueserviceclientgetqueueclient) + * [azure.storage.queue.QueueServiceClient.getQueueServiceUrl](#azurestoragequeuequeueserviceclientgetqueueserviceurl) + * [azure.storage.queue.QueueServiceClient.listQueues](#azurestoragequeuequeueserviceclientlistqueues) + * [azure.storage.queue.QueueServiceClientBuilder](#azurestoragequeuequeueserviceclientbuilder) + * [azure.storage.queue.QueueServiceClientBuilder.QueueServiceClientBuilder](#azurestoragequeuequeueserviceclientbuilderqueueserviceclientbuilder) + * [azure.storage.queue.QueueServiceClientBuilder.buildClient](#azurestoragequeuequeueserviceclientbuilderbuildclient) + * [azure.storage.queue.QueueServiceClientBuilder.connectionString](#azurestoragequeuequeueserviceclientbuilderconnectionstring) + * [azure.storage.queue.QueueServiceClientBuilder.credential](#azurestoragequeuequeueserviceclientbuildercredential) + * [azure.storage.queue.QueueServiceClientBuilder.endpoint](#azurestoragequeuequeueserviceclientbuilderendpoint) + * [azure.storage.queue.QueueServiceClientBuilder.httpClient](#azurestoragequeuequeueserviceclientbuilderhttpclient) + * [azure.storage.queue.QueueServiceClientBuilder.sasToken](#azurestoragequeuequeueserviceclientbuildersastoken) + * [azure.object](#azureobject) + * [azure.object.object](#azureobjectobject) + * [azure.object.setSystemProperties](#azureobjectsetsystemproperties) + * [mathworks](#mathworks) + * [mathworks.adx](#mathworksadx) + * [mathworks.adx.NullPolicy](#mathworksadxnullpolicy) + * [mathworks.adx.NullPolicy.NullPolicy](#mathworksadxnullpolicynullpolicy) + * [mathworks.adx.KQLQuery](#mathworksadxkqlquery) + * [mathworks.adx.adxRoot](#mathworksadxadxroot) + * [mathworks.adx.clustersGet](#mathworksadxclustersget) + * [mathworks.adx.createTable](#mathworksadxcreatetable) + * [mathworks.adx.dropTable](#mathworksadxdroptable) + * [mathworks.adx.exportToBlob](#mathworksadxexporttoblob) + * [mathworks.adx.ingestFile](#mathworksadxingestfile) + * [mathworks.adx.ingestFileQueue](#mathworksadxingestfilequeue) + * [mathworks.adx.ingestFromQuery](#mathworksadxingestfromquery) + * [mathworks.adx.ingestInline](#mathworksadxingestinline) + * [mathworks.adx.ingestTable](#mathworksadxingesttable) + * [mathworks.adx.ingestTableQueue](#mathworksadxingesttablequeue) + * [mathworks.adx.isClusterRunning](#mathworksadxisclusterrunning) + * [mathworks.adx.listTables](#mathworksadxlisttables) + * [mathworks.adx.mgtCommand](#mathworksadxmgtcommand) + * [mathworks.adx.run](#mathworksadxrun) + * [mathworks.adx.tSQLQuery](#mathworksadxtsqlquery) + * [mathworks.adx.tableExists](#mathworksadxtableexists) + * [mathworks.internal](#mathworksinternal) + * [mathworks.internal.adx](#mathworksinternaladx) + * [mathworks.internal.adx.buildSettingsFile](#mathworksinternaladxbuildsettingsfile) + * [mathworks.internal.adx.charOrString2Guid](#mathworksinternaladxcharorstring2guid) + * [mathworks.internal.adx.charOrString2String](#mathworksinternaladxcharorstring2string) + * [mathworks.internal.adx.datetime2datetime](#mathworksinternaladxdatetime2datetime) + * [mathworks.internal.adx.dispErrorAdditionalInfo](#mathworksinternaladxdisperroradditionalinfo) + * [mathworks.internal.adx.dispErrorDetails](#mathworksinternaladxdisperrordetails) + * [mathworks.internal.adx.dispErrorResponse](#mathworksinternaladxdisperrorresponse) + * [mathworks.internal.adx.doubleOrSingle2Decimal](#mathworksinternaladxdoubleorsingle2decimal) + * [mathworks.internal.adx.doubleOrSingle2Real](#mathworksinternaladxdoubleorsingle2real) + * [mathworks.internal.adx.duration2Timespan](#mathworksinternaladxduration2timespan) + * [mathworks.internal.adx.exampleCustomRowDecoder](#mathworksinternaladxexamplecustomrowdecoder) + * [mathworks.internal.adx.getDataBearerToken](#mathworksinternaladxgetdatabearertoken) + * [mathworks.internal.adx.getDefaultConfigValue](#mathworksinternaladxgetdefaultconfigvalue) + * [mathworks.internal.adx.getIngestionResources](#mathworksinternaladxgetingestionresources) + * [mathworks.internal.adx.getKustoIdentityToken](#mathworksinternaladxgetkustoidentitytoken) + * [mathworks.internal.adx.getRowWithSchema](#mathworksinternaladxgetrowwithschema) + * [mathworks.internal.adx.getRowsWithSchema](#mathworksinternaladxgetrowswithschema) + * [mathworks.internal.adx.getTableAndSchemas](#mathworksinternaladxgettableandschemas) + * [mathworks.internal.adx.getTableSchema](#mathworksinternaladxgettableschema) + * [mathworks.internal.adx.int2IntOrLong](#mathworksinternaladxint2intorlong) + * [mathworks.internal.adx.isMappableMATLABToKusto](#mathworksinternaladxismappablematlabtokusto) + * [mathworks.internal.adx.kustoSchemaToNamesAndTypes](#mathworksinternaladxkustoschematonamesandtypes) + * [mathworks.internal.adx.loadConfig](#mathworksinternaladxloadconfig) + * [mathworks.internal.adx.logical2Bool](#mathworksinternaladxlogical2bool) + * [mathworks.internal.adx.mapTypesKustoToMATLAB](#mathworksinternaladxmaptypeskustotomatlab) + * [mathworks.internal.adx.mapTypesMATLABToKusto](#mathworksinternaladxmaptypesmatlabtokusto) + * [mathworks.internal.adx.queryV1Response2Tables](#mathworksinternaladxqueryv1response2tables) + * [mathworks.internal.adx.queryV2Response2Tables](#mathworksinternaladxqueryv2response2tables) + * [mathworks.internal.adx.setCustomQueryHeaders](#mathworksinternaladxsetcustomqueryheaders) + * [mathworks.internal.adx.setDefaultConfigValue](#mathworksinternaladxsetdefaultconfigvalue) + * [mathworks.internal.adx.timespanLiteral2duration](#mathworksinternaladxtimespanliteral2duration) + * [mathworks.internal.adx.timespanValue2duration](#mathworksinternaladxtimespanvalue2duration) + * [mathworks.internal.adx.toDynamic](#mathworksinternaladxtodynamic) + * [mathworks.internal.adx.toKustoLiteral](#mathworksinternaladxtokustoliteral) + * [mathworks.internal.adx.validateConfig](#mathworksinternaladxvalidateconfig) + * [mathworks.internal.blob](#mathworksinternalblob) + * [mathworks.internal.blob.clientCopyToBlobContainer](#mathworksinternalblobclientcopytoblobcontainer) + * [mathworks.internal.blob.clientUploadToBlobContainer](#mathworksinternalblobclientuploadtoblobcontainer) + * [mathworks.internal.blob.sanitizeBlobName](#mathworksinternalblobsanitizeblobname) + * [mathworks.internal.curl](#mathworksinternalcurl) + * [mathworks.internal.curl.adxCurlWrite](#mathworksinternalcurladxcurlwrite) + * [mathworks.internal.curl.curlWrite](#mathworksinternalcurlcurlwrite) + * [mathworks.internal.countDown](#mathworksinternalcountdown) + * [mathworks.utils](#mathworksutils) + * [mathworks.utils.jwt](#mathworksutilsjwt) + * [mathworks.utils.jwt.ClaimsJM](#mathworksutilsjwtclaimsjm) + * [mathworks.utils.jwt.ClaimsJM.ClaimsJM](#mathworksutilsjwtclaimsjmclaimsjm) + * [mathworks.utils.jwt.JWT](#mathworksutilsjwtjwt) + * [mathworks.utils.jwt.JWT.JWT](#mathworksutilsjwtjwtjwt) + * [mathworks.utils.jwt.JWT.expiryTime](#mathworksutilsjwtjwtexpirytime) + * [mathworks.utils.jwt.JWT.isExpired](#mathworksutilsjwtjwtisexpired) + * [mathworks.utils.jwt.JWT.isTimeValid](#mathworksutilsjwtjwtistimevalid) + * [mathworks.utils.jwt.JWT.notBeforeTime](#mathworksutilsjwtjwtnotbeforetime) + * [mathworks.utils.msOAuth2Client](#mathworksutilsmsoauth2client) + * [mathworks.utils.msOAuth2Client.acquireClientCredentialToken](#mathworksutilsmsoauth2clientacquireclientcredentialtoken) + * [mathworks.utils.msOAuth2Client.acquireDeviceCodeToken](#mathworksutilsmsoauth2clientacquiredevicecodetoken) + * [mathworks.utils.msOAuth2Client.acquireInteractiveBrowserToken](#mathworksutilsmsoauth2clientacquireinteractivebrowsertoken) + * [mathworks.utils.msOAuth2Client.acquireManagedIdentityToken](#mathworksutilsmsoauth2clientacquiremanagedidentitytoken) + * [mathworks.utils.msOAuth2Client.acquireToken](#mathworksutilsmsoauth2clientacquiretoken) + * [mathworks.utils.msOAuth2Client.addTokenToCache](#mathworksutilsmsoauth2clientaddtokentocache) + * [mathworks.utils.msOAuth2Client.findTokenInCache](#mathworksutilsmsoauth2clientfindtokenincache) + * [mathworks.utils.msOAuth2Client.getFullToken](#mathworksutilsmsoauth2clientgetfulltoken) + * [mathworks.utils.msOAuth2Client.getToken](#mathworksutilsmsoauth2clientgettoken) + * [mathworks.utils.msOAuth2Client.initializeCache](#mathworksutilsmsoauth2clientinitializecache) + * [mathworks.utils.msOAuth2Client.msOAuth2Client](#mathworksutilsmsoauth2clientmsoauth2client) + * [mathworks.utils.msOAuth2Client.refreshToken](#mathworksutilsmsoauth2clientrefreshtoken) + * [mathworks.utils.msOAuth2Client.saveCache](#mathworksutilsmsoauth2clientsavecache) + * [mathworks.utils.UUID](#mathworksutilsuuid) + * [mathworks.utils.addArgs](#mathworksutilsaddargs) + * [Logger](#logger) + * [Logger.Logger](#loggerlogger) + * [Logger.clearLogFile](#loggerclearlogfile) + * [Logger.clearMessages](#loggerclearmessages) + * [Logger.closeLogFile](#loggercloselogfile) + * [Logger.debug](#loggerdebug) + * [Logger.delete](#loggerdelete) + * [Logger.error](#loggererror) + * [Logger.getLogger](#loggergetlogger) + * [Logger.log](#loggerlog) + * [Logger.openLogFile](#loggeropenlogfile) + * [Logger.processMessage](#loggerprocessmessage) + * [Logger.verbose](#loggerverbose) + * [Logger.warning](#loggerwarning) + * [Logger.write](#loggerwrite) + * [AzureCommonRoot](#azurecommonroot) + * [AzureShell](#azureshell) + * [AzureStorageExplorer](#azurestorageexplorer) + * [Logger](#logger) + * [configureCredentials](#configurecredentials) + * [configureProxyOptions](#configureproxyoptions) + * [createKeyVaultClient](#createkeyvaultclient) + * [createStorageClient](#createstorageclient) + * [initialize](#initialize) + * [loadConfigurationSettings](#loadconfigurationsettings) + +## Help + +### adx + +### adx.control + +### adx.control.api + +### adx.control.api.AttachedDatabaseConfigurations + +Superclass: adx.control.BaseClient + +```text +AttachedDatabaseConfigurations No description provided + + AttachedDatabaseConfigurations Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + AttachedDatabaseConfigurations Methods: + + AttachedDatabaseConfigurations - Constructor + attachedDatabaseConfigurationsCheckNameAvailability - + attachedDatabaseConfigurationsCreateOrUpdate - + attachedDatabaseConfigurationsDelete - + attachedDatabaseConfigurationsGet - + attachedDatabaseConfigurationsListByCluster - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` -## API Reference +#### adx.control.api.AttachedDatabaseConfigurations.AttachedDatabaseConfigurations -Documentation generation settings: +```text +AttachedDatabaseConfigurations Constructor, creates a AttachedDatabaseConfigurations instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.AttachedDatabaseConfigurations(); + + % Create a client for alternative server/base URI + client = adx.control.api.AttachedDatabaseConfigurations("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.AttachedDatabaseConfigurations("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.AttachedDatabaseConfigurations("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -* Including class level help text -* Omitting constructor help text -* Excluding inherited methods -* Excluding default MATLAB classes +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCheckNameAvailability +```text +attachedDatabaseConfigurationsCheckNameAvailability No summary provided + Checks that the attached database configuration resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + AttachedDatabaseConfigurationsCheckNameRequest - The name of the resource., Type: AttachedDatabaseConfigurationsCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` -## Package *azure* +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCreateOrUpdate +```text +attachedDatabaseConfigurationsCreateOrUpdate No summary provided + Creates or updates an attached database configuration. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + AttachedDatabaseConfiguration - The database parameters supplied to the CreateOrUpdate operation., Type: AttachedDatabaseConfiguration + Required properties in the model for this call: + Optional properties in the model for this call: + location + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the database. + 201: Successfully created the database. + 202: Accepted the create database request. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfiguration + + See Also: adx.control.models.AttachedDatabaseConfiguration +``` -### Classes +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsDelete -* [azure.object](#azureobject) +```text +attachedDatabaseConfigurationsDelete No summary provided + Deletes the attached database configuration with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the database. + 202: Accepted. + 204: The specified database does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Subpackage *azure.identity* +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsGet +```text +attachedDatabaseConfigurationsGet No summary provided + Returns an attached database configuration. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified attached database configuration. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfiguration + + See Also: adx.control.models.AttachedDatabaseConfiguration +``` -### Classes +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsListByCluster -* [azure.identity.ClientCertificateCredentialBuilder](#azureidentityclientcertificatecredentialbuilder) -* [azure.identity.CredentialBuilderBase](#azureidentitycredentialbuilderbase) -* [azure.identity.ManagedIdentityCredentialBuilder](#azureidentitymanagedidentitycredentialbuilder) -* [azure.identity.InteractiveBrowserCredentialBuilder](#azureidentityinteractivebrowsercredentialbuilder) -* [azure.identity.DeviceCodeCredential](#azureidentitydevicecodecredential) -* [azure.identity.EnvironmentCredentialBuilder](#azureidentityenvironmentcredentialbuilder) -* [azure.identity.ManagedIdentityCredential](#azureidentitymanagedidentitycredential) -* [azure.identity.SharedTokenCacheCredentialBuilder](#azureidentitysharedtokencachecredentialbuilder) -* [azure.identity.ClientSecretCredentialBuilder](#azureidentityclientsecretcredentialbuilder) -* [azure.identity.ClientCertificateCredential](#azureidentityclientcertificatecredential) -* [azure.identity.InteractiveBrowserCredential](#azureidentityinteractivebrowsercredential) -* [azure.identity.SharedTokenCacheCredential](#azureidentitysharedtokencachecredential) -* [azure.identity.ChainedTokenCredentialBuilder](#azureidentitychainedtokencredentialbuilder) -* [azure.identity.EnvironmentCredential](#azureidentityenvironmentcredential) -* [azure.identity.DefaultAzureCredential](#azureidentitydefaultazurecredential) -* [azure.identity.AzureCliCredentialBuilder](#azureidentityazureclicredentialbuilder) -* [azure.identity.DeviceCodeInfo](#azureidentitydevicecodeinfo) -* [azure.identity.ClientSecretCredential](#azureidentityclientsecretcredential) -* [azure.identity.DeviceCodeCredentialBuilder](#azureidentitydevicecodecredentialbuilder) -* [azure.identity.ChainedTokenCredential](#azureidentitychainedtokencredential) -* [azure.identity.DefaultAzureCredentialBuilder](#azureidentitydefaultazurecredentialbuilder) -* [azure.identity.AzureCliCredential](#azureidentityazureclicredential) -* [azure.identity.AuthenticationRecord](#azureidentityauthenticationrecord) -* [azure.identity.TokenCachePersistenceOptions](#azureidentitytokencachepersistenceoptions) +```text +attachedDatabaseConfigurationsListByCluster No summary provided + Returns the list of attached database configurations of the given Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of attached database configurations. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfigurationListResult + + See Also: adx.control.models.AttachedDatabaseConfigurationListResult +``` -### Subpackage *azure.storage.common* +### adx.control.api.ClusterPrincipalAssignments +Superclass: adx.control.BaseClient -### Classes +```text +ClusterPrincipalAssignments No description provided + + ClusterPrincipalAssignments Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + ClusterPrincipalAssignments Methods: + + ClusterPrincipalAssignments - Constructor + clusterPrincipalAssignmentsCheckNameAvailability - + clusterPrincipalAssignmentsCreateOrUpdate - + clusterPrincipalAssignmentsDelete - + clusterPrincipalAssignmentsGet - + clusterPrincipalAssignmentsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` -* [azure.storage.common.StorageSharedKeyCredential](#azurestoragecommonstoragesharedkeycredential) +#### adx.control.api.ClusterPrincipalAssignments.ClusterPrincipalAssignments -### Subpackage *azure.storage.common.sas* +```text +ClusterPrincipalAssignments Constructor, creates a ClusterPrincipalAssignments instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.ClusterPrincipalAssignments(); + + % Create a client for alternative server/base URI + client = adx.control.api.ClusterPrincipalAssignments("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.ClusterPrincipalAssignments("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.ClusterPrincipalAssignments("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCheckNameAvailability -### Classes +```text +clusterPrincipalAssignmentsCheckNameAvailability No summary provided + Checks that the principal assignment name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + ClusterPrincipalAssignmentCheckNameRequest - The name of the principal assignment., Type: ClusterPrincipalAssignmentCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` -* [azure.storage.common.sas.AccountSasResourceType](#azurestoragecommonsasaccountsasresourcetype) -* [azure.storage.common.sas.AccountSasService](#azurestoragecommonsasaccountsasservice) -* [azure.storage.common.sas.AccountSasSignatureValues](#azurestoragecommonsasaccountsassignaturevalues) -* [azure.storage.common.sas.AccountSasPermission](#azurestoragecommonsasaccountsaspermission) +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCreateOrUpdate -### Subpackage *azure.storage.common.policy* +```text +clusterPrincipalAssignmentsCreateOrUpdate No summary provided + Create a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + ClusterPrincipalAssignment - The Kusto cluster principalAssignment''s parameters supplied for the operation., Type: ClusterPrincipalAssignment + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the PrincipalAssignment. + 201: Successfully created the principalAssignment. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignment + + See Also: adx.control.models.ClusterPrincipalAssignment +``` +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsDelete -### Classes +```text +clusterPrincipalAssignmentsDelete No summary provided + Deletes a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- principalAssignments deleted successfully. + 202: Accepted the delete principalAssignments request. + 204: NoContent -- principalAssignments does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -* [azure.storage.common.policy.RequestRetryOptions](#azurestoragecommonpolicyrequestretryoptions) -* [azure.storage.common.policy.RetryPolicyType](#azurestoragecommonpolicyretrypolicytype) +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsGet -### Subpackage *azure.storage.queue* +```text +clusterPrincipalAssignmentsGet No summary provided + Gets a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster principal assignment object. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignment + + See Also: adx.control.models.ClusterPrincipalAssignment +``` +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsList -### Classes +```text +clusterPrincipalAssignmentsList No summary provided + Lists all Kusto cluster principalAssignments. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignmentListResult + + See Also: adx.control.models.ClusterPrincipalAssignmentListResult +``` -* [azure.storage.queue.QueueServiceClientBuilder](#azurestoragequeuequeueserviceclientbuilder) -* [azure.storage.queue.QueueServiceClient](#azurestoragequeuequeueserviceclient) -* [azure.storage.queue.QueueClient](#azurestoragequeuequeueclient) -* [azure.storage.queue.QueueClientBuilder](#azurestoragequeuequeueclientbuilder) +### adx.control.api.Clusters -### Subpackage *azure.storage.queue.models* +Superclass: adx.control.BaseClient +```text +Clusters No description provided + + Clusters Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Clusters Methods: + + Clusters - Constructor + clustersAddLanguageExtensions - + clustersCheckNameAvailability - + clustersCreateOrUpdate - + clustersDelete - + clustersDetachFollowerDatabases - + clustersDiagnoseVirtualNetwork - + clustersGet - + clustersList - + clustersListByResourceGroup - + clustersListFollowerDatabases - + clustersListLanguageExtensions - + clustersListSkusByResource - + clustersMigrate - + clustersRemoveLanguageExtensions - + clustersStart - + clustersStop - + clustersUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` -### Classes +#### adx.control.api.Clusters.Clusters -* [azure.storage.queue.models.SendMessageResult](#azurestoragequeuemodelssendmessageresult) -* [azure.storage.queue.models.PeekedMessageItem](#azurestoragequeuemodelspeekedmessageitem) -* [azure.storage.queue.models.QueueMessageItem](#azurestoragequeuemodelsqueuemessageitem) -* [azure.storage.queue.models.QueueProperties](#azurestoragequeuemodelsqueueproperties) -* [azure.storage.queue.models.QueueItem](#azurestoragequeuemodelsqueueitem) +```text +Clusters Constructor, creates a Clusters instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Clusters(); + + % Create a client for alternative server/base URI + client = adx.control.api.Clusters("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Clusters("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Clusters("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -### Subpackage *azure.storage.queue.sas* +#### adx.control.api.Clusters.clustersAddLanguageExtensions +```text +clustersAddLanguageExtensions No summary provided + Add a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + LanguageExtensionsList - The language extensions to add., Type: LanguageExtensionsList + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Classes +#### adx.control.api.Clusters.clustersCheckNameAvailability -* [azure.storage.queue.sas.QueueSasPermission](#azurestoragequeuesasqueuesaspermission) -* [azure.storage.queue.sas.QueueServiceSasSignatureValues](#azurestoragequeuesasqueueservicesassignaturevalues) +```text +clustersCheckNameAvailability No summary provided + Checks that the cluster name is valid and is not already in use. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + ClusterCheckNameRequest - The name of the cluster., Type: ClusterCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` -### Subpackage *azure.storage.file.datalake* +#### adx.control.api.Clusters.clustersCreateOrUpdate +```text +clustersCreateOrUpdate No summary provided + Create or update a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Cluster - The Kusto cluster parameters supplied to the CreateOrUpdate operation., Type: Cluster + Required properties in the model for this call: + sku + Optional properties in the model for this call: + systemData + zones + identity + xproperties + etag + + Optional name-value parameters: + If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + If_None_Match - Set to ''*'' to allow a new cluster to be created, but to prevent updating an existing cluster. Other values will result in a 412 Pre-condition Failed response., Type: string + + Responses: + 200: Successfully updated the Cluster. + 201: Successfully created the cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` -### Classes +#### adx.control.api.Clusters.clustersDelete -* [azure.storage.file.datalake.DataLakeFileClient](#azurestoragefiledatalakedatalakefileclient) -* [azure.storage.file.datalake.DataLakeFileSystemClientBuilder](#azurestoragefiledatalakedatalakefilesystemclientbuilder) -* [azure.storage.file.datalake.DataLakeFileSystemClient](#azurestoragefiledatalakedatalakefilesystemclient) -* [azure.storage.file.datalake.DataLakePathClientBuilder](#azurestoragefiledatalakedatalakepathclientbuilder) -* [azure.storage.file.datalake.DataLakeDirectoryClient](#azurestoragefiledatalakedatalakedirectoryclient) +```text +clustersDelete No summary provided + Deletes a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- cluster deleted successfully. + 202: Accepted the delete cluster request. + 204: NoContent -- cluster does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Subpackage *azure.storage.file.datalake.models* +#### adx.control.api.Clusters.clustersDetachFollowerDatabases +```text +clustersDetachFollowerDatabases No summary provided + Detaches all followers of a database owned by this cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + FollowerDatabaseDefinition - The follower databases properties to remove., Type: FollowerDatabaseDefinition + Required properties in the model for this call: + clusterResourceId + attachedDatabaseConfigurationName + Optional properties in the model for this call: + databaseName + tableLevelSharingProperties + databaseShareOrigin + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Classes +#### adx.control.api.Clusters.clustersDiagnoseVirtualNetwork -* [azure.storage.file.datalake.models.PathItem](#azurestoragefiledatalakemodelspathitem) -* [azure.storage.file.datalake.models.PathProperties](#azurestoragefiledatalakemodelspathproperties) +```text +clustersDiagnoseVirtualNetwork No summary provided + Diagnoses network connectivity status for external resources on which the service is dependent on. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: DiagnoseVirtualNetworkResult + + See Also: adx.control.models.DiagnoseVirtualNetworkResult +``` -### Subpackage *azure.storage.file.datalake.sas* +#### adx.control.api.Clusters.clustersGet +```text +clustersGet No summary provided + Gets a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` -### Classes +#### adx.control.api.Clusters.clustersList -* [azure.storage.file.datalake.sas.FileSystemSasPermission](#azurestoragefiledatalakesasfilesystemsaspermission) -* [azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues](#azurestoragefiledatalakesasdatalakeservicesassignaturevalues) -* [azure.storage.file.datalake.sas.PathSasPermission](#azurestoragefiledatalakesaspathsaspermission) +```text +clustersList No summary provided + Lists all Kusto clusters within a subscription. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterListResult + + See Also: adx.control.models.ClusterListResult +``` -### Subpackage *azure.storage.blob* +#### adx.control.api.Clusters.clustersListByResourceGroup +```text +clustersListByResourceGroup No summary provided + Lists all Kusto clusters within a resource group. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterListResult + + See Also: adx.control.models.ClusterListResult +``` -### Classes +#### adx.control.api.Clusters.clustersListFollowerDatabases -* [azure.storage.blob.BlobClient](#azurestorageblobblobclient) -* [azure.storage.blob.BlobContainerClient](#azurestorageblobblobcontainerclient) -* [azure.storage.blob.BlobContainerClientBuilder](#azurestorageblobblobcontainerclientbuilder) -* [azure.storage.blob.BlobClientBuilder](#azurestorageblobblobclientbuilder) -* [azure.storage.blob.BlobServiceClient](#azurestorageblobblobserviceclient) -* [azure.storage.blob.BlobServiceClientBuilder](#azurestorageblobblobserviceclientbuilder) +```text +clustersListFollowerDatabases No summary provided + Returns a list of databases that are owned by this cluster and were followed by another cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of followed databases. + 0: Error response describing why the operation failed. + + Returns: FollowerDatabaseListResult + + See Also: adx.control.models.FollowerDatabaseListResult +``` -### Subpackage *azure.storage.blob.models* +#### adx.control.api.Clusters.clustersListLanguageExtensions +```text +clustersListLanguageExtensions No summary provided + Returns a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of language extensions. + 0: Error response describing why the operation failed. + + Returns: LanguageExtensionsList + + See Also: adx.control.models.LanguageExtensionsList +``` -### Classes +#### adx.control.api.Clusters.clustersListSkusByResource -* [azure.storage.blob.models.BlobContainerItem](#azurestorageblobmodelsblobcontaineritem) -* [azure.storage.blob.models.UserDelegationKey](#azurestorageblobmodelsuserdelegationkey) -* [azure.storage.blob.models.ListBlobsOptions](#azurestorageblobmodelslistblobsoptions) -* [azure.storage.blob.models.BlobItemProperties](#azurestorageblobmodelsblobitemproperties) -* [azure.storage.blob.models.BlobListDetails](#azurestorageblobmodelsbloblistdetails) -* [azure.storage.blob.models.BlobItem](#azurestorageblobmodelsblobitem) -* [azure.storage.blob.models.StorageAccountInfo](#azurestorageblobmodelsstorageaccountinfo) +```text +clustersListSkusByResource No summary provided + Returns the SKUs available for the provided resource. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ListResourceSkusResult + + See Also: adx.control.models.ListResourceSkusResult +``` -### Subpackage *azure.storage.blob.sas* +#### adx.control.api.Clusters.clustersMigrate +```text +clustersMigrate No summary provided + Migrate data from a Kusto cluster to another cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + ClusterMigrateRequest - The cluster migrate request parameters., Type: ClusterMigrateRequest + Required properties in the model for this call: + clusterResourceId + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK. + 202: Accepted. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Classes +#### adx.control.api.Clusters.clustersRemoveLanguageExtensions -* [azure.storage.blob.sas.BlobServiceSasSignatureValues](#azurestorageblobsasblobservicesassignaturevalues) -* [azure.storage.blob.sas.BlobContainerSasPermission](#azurestorageblobsasblobcontainersaspermission) -* [azure.storage.blob.sas.BlobSasPermission](#azurestorageblobsasblobsaspermission) +```text +clustersRemoveLanguageExtensions No summary provided + Remove a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + LanguageExtensionsList - The language extensions to remove., Type: LanguageExtensionsList + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Subpackage *azure.storage.blob.specialized* +#### adx.control.api.Clusters.clustersStart +```text +clustersStart No summary provided + Starts a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Classes +#### adx.control.api.Clusters.clustersStop -* [azure.storage.blob.specialized.BlobLeaseClient](#azurestorageblobspecializedblobleaseclient) -* [azure.storage.blob.specialized.BlobLeaseClientBuilder](#azurestorageblobspecializedblobleaseclientbuilder) +```text +clustersStop No summary provided + Stops a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -### Subpackage *azure.core.credential* +#### adx.control.api.Clusters.clustersUpdate +```text +clustersUpdate No summary provided + Update a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + ClusterUpdate - The Kusto cluster parameters supplied to the Update operation., Type: ClusterUpdate + Required properties in the model for this call: + Optional properties in the model for this call: + tags + location + sku + identity + xproperties + + Optional name-value parameters: + If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + + Responses: + 200: Successfully updated the Cluster. + 201: Successfully updated the cluster. + 202: Successfully updated the cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` -### Classes +### adx.control.api.DataConnections -* [azure.core.credential.TokenCredential](#azurecorecredentialtokencredential) -* [azure.core.credential.AzureSasCredential](#azurecorecredentialazuresascredential) -* [azure.core.credential.AccessToken](#azurecorecredentialaccesstoken) -* [azure.core.credential.TokenRequestContext](#azurecorecredentialtokenrequestcontext) +Superclass: adx.control.BaseClient -### Subpackage *azure.core.util.polling* +```text +DataConnections No description provided + + DataConnections Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + DataConnections Methods: + + DataConnections - Constructor + dataConnectionsCheckNameAvailability - + dataConnectionsCreateOrUpdate - + dataConnectionsDataConnectionValidation - + dataConnectionsDelete - + dataConnectionsGet - + dataConnectionsListByDatabase - + dataConnectionsUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` +#### adx.control.api.DataConnections.DataConnections -### Classes +```text +DataConnections Constructor, creates a DataConnections instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.DataConnections(); + + % Create a client for alternative server/base URI + client = adx.control.api.DataConnections("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.DataConnections("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.DataConnections("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -* [azure.core.util.polling.SyncPoller](#azurecoreutilpollingsyncpoller) -* [azure.core.util.polling.PollResponse](#azurecoreutilpollingpollresponse) -* [azure.core.util.polling.LongRunningOperationStatus](#azurecoreutilpollinglongrunningoperationstatus) +#### adx.control.api.DataConnections.dataConnectionsCheckNameAvailability -### Subpackage *azure.security.keyvault.secrets* +```text +dataConnectionsCheckNameAvailability No summary provided + Checks that the data connection name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DataConnectionCheckNameRequest - The name of the data connection., Type: DataConnectionCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the Kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` +#### adx.control.api.DataConnections.dataConnectionsCreateOrUpdate -### Classes +```text +dataConnectionsCreateOrUpdate No summary provided + Creates or updates a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DataConnection - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnection + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + No optional parameters + + Responses: + 200: Successfully updated the data connection. + 201: Successfully created the data connection. + 202: Accepted the create data connection request. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` -* [azure.security.keyvault.secrets.SecretClientBuilder](#azuresecuritykeyvaultsecretssecretclientbuilder) -* [azure.security.keyvault.secrets.SecretClient](#azuresecuritykeyvaultsecretssecretclient) +#### adx.control.api.DataConnections.dataConnectionsDataConnectionValidation -### Subpackage *azure.security.keyvault.secrets.models* +```text +dataConnectionsDataConnectionValidation No summary provided + Checks that the data connection parameters are valid. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DataConnectionValidation - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnectionValidation + Required properties in the model for this call: + Optional properties in the model for this call: + dataConnectionName + xproperties + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: DataConnectionValidationListResult + + See Also: adx.control.models.DataConnectionValidationListResult +``` +#### adx.control.api.DataConnections.dataConnectionsDelete -### Classes +```text +dataConnectionsDelete No summary provided + Deletes the data connection with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the data connection. + 202: Accepted. + 204: The specified data connection does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` -* [azure.security.keyvault.secrets.models.DeletedSecret](#azuresecuritykeyvaultsecretsmodelsdeletedsecret) -* [azure.security.keyvault.secrets.models.KeyVaultSecret](#azuresecuritykeyvaultsecretsmodelskeyvaultsecret) -* [azure.security.keyvault.secrets.models.SecretProperties](#azuresecuritykeyvaultsecretsmodelssecretproperties) +#### adx.control.api.DataConnections.dataConnectionsGet -### Subpackage *azure.security.keyvault.keys* +```text +dataConnectionsGet No summary provided + Returns a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified data connection. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` +#### adx.control.api.DataConnections.dataConnectionsListByDatabase -### Classes +```text +dataConnectionsListByDatabase No summary provided + Returns the list of data connections of the given Kusto database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of data connections. + 0: Error response describing why the operation failed. + + Returns: DataConnectionListResult + + See Also: adx.control.models.DataConnectionListResult +``` -* [azure.security.keyvault.keys.KeyClient](#azuresecuritykeyvaultkeyskeyclient) -* [azure.security.keyvault.keys.KeyClientBuilder](#azuresecuritykeyvaultkeyskeyclientbuilder) +#### adx.control.api.DataConnections.dataConnectionsUpdate -### Subpackage *azure.security.keyvault.keys.models* +```text +dataConnectionsUpdate No summary provided + Updates a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DataConnection - The data connection parameters supplied to the Update operation., Type: DataConnection + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + No optional parameters + + Responses: + 200: Successfully updated the data connection. + 201: Successfully updated the data connection. + 202: Accepted the update data connection request. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` +### adx.control.api.DatabasePrincipalAssignments -### Classes +Superclass: adx.control.BaseClient -* [azure.security.keyvault.keys.models.JsonWebKey](#azuresecuritykeyvaultkeysmodelsjsonwebkey) -* [azure.security.keyvault.keys.models.DeletedKey](#azuresecuritykeyvaultkeysmodelsdeletedkey) -* [azure.security.keyvault.keys.models.KeyProperties](#azuresecuritykeyvaultkeysmodelskeyproperties) -* [azure.security.keyvault.keys.models.KeyVaultKey](#azuresecuritykeyvaultkeysmodelskeyvaultkey) -* [azure.security.keyvault.keys.models.KeyType](#azuresecuritykeyvaultkeysmodelskeytype) - - -### Standalone Classes - -* [Logger](#logger) - -### Standalone Functions +```text +DatabasePrincipalAssignments No description provided + + DatabasePrincipalAssignments Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + DatabasePrincipalAssignments Methods: + + DatabasePrincipalAssignments - Constructor + databasePrincipalAssignmentsCheckNameAvailability - + databasePrincipalAssignmentsCreateOrUpdate - + databasePrincipalAssignmentsDelete - + databasePrincipalAssignmentsGet - + databasePrincipalAssignmentsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` -* [AzureCommonRoot](#azurecommonroot) -* [AzureShell](#azureshell) -* [AzureStorageExplorer](#azurestorageexplorer) -* [Logger](#logger) -* [compareAuthEnvVars](#compareauthenvvars) -* [configureCredentials](#configurecredentials) -* [configureProxyOptions](#configureproxyoptions) -* [createKeyVaultClient](#createkeyvaultclient) -* [createStorageClient](#createstorageclient) -* [datetime2OffsetDateTime](#datetime2offsetdatetime) -* [initialize](#initialize) -* [loadConfigurationSettings](#loadconfigurationsettings) +#### adx.control.api.DatabasePrincipalAssignments.DatabasePrincipalAssignments +```text +DatabasePrincipalAssignments Constructor, creates a DatabasePrincipalAssignments instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.DatabasePrincipalAssignments(); + + % Create a client for alternative server/base URI + client = adx.control.api.DatabasePrincipalAssignments("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.DatabasePrincipalAssignments("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.DatabasePrincipalAssignments("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` ------- +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCheckNameAvailability -## API Help +```text +databasePrincipalAssignmentsCheckNameAvailability No summary provided + Checks that the database principal assignment is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DatabasePrincipalAssignmentCheckNameRequest - The name of the resource., Type: DatabasePrincipalAssignmentCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCreateOrUpdate -#### azure.object +```text +databasePrincipalAssignmentsCreateOrUpdate No summary provided + Creates a Kusto cluster database principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalAssignment - The Kusto principalAssignments parameters supplied for the operation., Type: DatabasePrincipalAssignment + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the PrincipalAssignments. + 201: Successfully created the principalAssignments. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignment + + See Also: adx.control.models.DatabasePrincipalAssignment +``` -```notalanguage - OBJECT Root Class for all Azure wrapper objects +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsDelete +```text +databasePrincipalAssignmentsDelete No summary provided + Deletes a Kusto principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- principalAssignments deleted successfully. + 202: Accepted the delete principalAssignments request. + 204: NoContent -- principalAssignments does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. ``` +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsGet -#### azure.identity.ClientCertificateCredentialBuilder +```text +databasePrincipalAssignmentsGet No summary provided + Gets a Kusto cluster database principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster database principal assignment object. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignment + + See Also: adx.control.models.DatabasePrincipalAssignment +``` -```notalanguage - CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsList +```text +databasePrincipalAssignmentsList No summary provided + Lists all Kusto cluster database principalAssignments. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignmentListResult + + See Also: adx.control.models.DatabasePrincipalAssignmentListResult ``` -*azure.identity.ClientCertificateCredentialBuilder.authorityHost* +### adx.control.api.Databases -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated ClientCertificateCredentialBuilder is returned. +Superclass: adx.control.BaseClient +```text +Databases No description provided + + Databases Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Databases Methods: + + Databases - Constructor + databaseInviteFollower - + databasesAddPrincipals - + databasesCheckNameAvailability - + databasesCreateOrUpdate - + databasesDelete - + databasesGet - + databasesListByCluster - + databasesListPrincipals - + databasesRemovePrincipals - + databasesUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` -*azure.identity.ClientCertificateCredentialBuilder.build* - -```notalanguage - BUILD Creates new ClientCertificateCredential with the configured options set +#### adx.control.api.Databases.Databases +```text +Databases Constructor, creates a Databases instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Databases(); + + % Create a client for alternative server/base URI + client = adx.control.api.Databases("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Databases("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Databases("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` -*azure.identity.ClientCertificateCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated ClientCertificateCredentialBuilder is returned. +#### adx.control.api.Databases.databaseInviteFollower +```text +databaseInviteFollower No summary provided + Generates an invitation token that allows attaching a follower database to this database. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + DatabaseInviteFollowerRequest - The follower invitation request parameters., Type: DatabaseInviteFollowerRequest + Required properties in the model for this call: + inviteeEmail + Optional properties in the model for this call: + tableLevelSharingProperties + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: DatabaseInviteFollowerResult + + See Also: adx.control.models.DatabaseInviteFollowerResult ``` -*azure.identity.ClientCertificateCredentialBuilder.pemCertificate* - -```notalanguage - PEMCERTIFICATE Sets the path of the PEM certificate for authenticating to AAD - An updated ClientCertificateCredentialBuilder is returned. +#### adx.control.api.Databases.databasesAddPrincipals +```text +databasesAddPrincipals No summary provided + Add Database principals permissions. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalListRequest - List of database principals to add., Type: DatabasePrincipalListRequest + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK -- Successfully added the list of database principals. Returns the updated list of principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult ``` -*azure.identity.ClientCertificateCredentialBuilder.tenantId* - -```notalanguage - TENANTID Sets tenant id to authenticate through ClientCertificateCredential - An updated ClientCertificateCredentialBuilder is returned. +#### adx.control.api.Databases.databasesCheckNameAvailability +```text +databasesCheckNameAvailability No summary provided + Checks that the databases resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + CheckNameRequest - The name of the resource., Type: CheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult ``` +#### adx.control.api.Databases.databasesCreateOrUpdate -#### azure.identity.CredentialBuilderBase +```text +databasesCreateOrUpdate No summary provided + Creates or updates a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Database - The database parameters supplied to the CreateOrUpdate operation., Type: Database + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + Optional name-value parameters: + callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + + Responses: + 200: Successfully updated the database. + 201: Successfully created the database. + 202: Accepted the create database request. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database +``` -```notalanguage -azure.identity.CredentialBuilderBase is a class. - obj = azure.identity.CredentialBuilderBase +#### adx.control.api.Databases.databasesDelete +```text +databasesDelete No summary provided + Deletes the database with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the database. + 202: Accepted. + 204: The specified database does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. ``` -*azure.identity.CredentialBuilderBase.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +#### adx.control.api.Databases.databasesGet +```text +databasesGet No summary provided + Returns a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified database. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database ``` +#### adx.control.api.Databases.databasesListByCluster -#### azure.identity.ManagedIdentityCredentialBuilder +```text +databasesListByCluster No summary provided + Returns the list of databases of the given Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + Optional name-value parameters: + top - limit the number of results, Type: int32, Format: int32 + skiptoken - Skiptoken is only used if a previous operation returned a partial result. If a previous response contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that specifies a starting point to use for subsequent calls., Type: string + + Responses: + 200: Successfully retrieved the list of databases. + 0: Error response describing why the operation failed. + + Returns: DatabaseListResult + + See Also: adx.control.models.DatabaseListResult +``` -```notalanguage - MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential +#### adx.control.api.Databases.databasesListPrincipals +```text +databasesListPrincipals No summary provided + Returns a list of database principals of the given Kusto cluster and database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of database principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult ``` -*azure.identity.ManagedIdentityCredentialBuilder.build* - -```notalanguage - BUILD Creates new ManagedIdentityCredential with the configured options set +#### adx.control.api.Databases.databasesRemovePrincipals +```text +databasesRemovePrincipals No summary provided + Remove Database principals permissions. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalListRequest - List of database principals to remove., Type: DatabasePrincipalListRequest + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK -- Successfully removed the list of database principals. Returns the updated list of principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult ``` -*azure.identity.ManagedIdentityCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated ManagedIdentityCredentialBuilder is returned. +#### adx.control.api.Databases.databasesUpdate +```text +databasesUpdate No summary provided + Updates a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Database - The database parameters supplied to the Update operation., Type: Database + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + Optional name-value parameters: + callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + + Responses: + 200: Successfully updated the database. + 201: Successfully updated the database. + 202: Accepted the update database request. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database ``` -*azure.identity.ManagedIdentityCredentialBuilder.maxRetry* +### adx.control.api.Default -```notalanguage - MAXRETRY Sets max number of retries when an authentication request fails +Superclass: adx.control.BaseClient +```text +Default No description provided + + Default Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Default Methods: + + Default - Constructor + clustersListSkus - + skusList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` -*azure.identity.ManagedIdentityCredentialBuilder.resourceId* - -```notalanguage - RESOURCEID Sets client id - An updated ManagedIdentityCredentialBuilder is returned. +#### adx.control.api.Default.Default +```text +Default Constructor, creates a Default instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Default(); + + % Create a client for alternative server/base URI + client = adx.control.api.Default("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Default("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Default("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` +#### adx.control.api.Default.clustersListSkus -#### azure.identity.InteractiveBrowserCredentialBuilder +```text +clustersListSkus No summary provided + Lists eligible SKUs for Kusto resource provider. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: SkuDescriptionList + + See Also: adx.control.models.SkuDescriptionList +``` -```notalanguage - INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential +#### adx.control.api.Default.skusList +```text +skusList No summary provided + Lists eligible region SKUs for Kusto resource provider by Azure region. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: SkuDescriptionList + + See Also: adx.control.models.SkuDescriptionList ``` -*azure.identity.InteractiveBrowserCredentialBuilder.authorityHost* +### adx.control.api.ManagedPrivateEndpoints -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated InteractiveBrowserCredentialBuilder is returned. +Superclass: adx.control.BaseClient +```text +ManagedPrivateEndpoints No description provided + + ManagedPrivateEndpoints Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + ManagedPrivateEndpoints Methods: + + ManagedPrivateEndpoints - Constructor + managedPrivateEndpointsCheckNameAvailability - + managedPrivateEndpointsCreateOrUpdate - + managedPrivateEndpointsDelete - + managedPrivateEndpointsGet - + managedPrivateEndpointsList - + managedPrivateEndpointsUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` -*azure.identity.InteractiveBrowserCredentialBuilder.build* - -```notalanguage - BUILD Creates new InteractiveBrowserCredential with the configured options set +#### adx.control.api.ManagedPrivateEndpoints.ManagedPrivateEndpoints +```text +ManagedPrivateEndpoints Constructor, creates a ManagedPrivateEndpoints instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.ManagedPrivateEndpoints(); + + % Create a client for alternative server/base URI + client = adx.control.api.ManagedPrivateEndpoints("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.ManagedPrivateEndpoints("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.ManagedPrivateEndpoints("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` -*azure.identity.InteractiveBrowserCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated InteractiveBrowserCredentialBuilder is returned. +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCheckNameAvailability +```text +managedPrivateEndpointsCheckNameAvailability No summary provided + Checks that the managed private endpoints resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + ManagedPrivateEndpointsCheckNameRequest - The name of the resource., Type: ManagedPrivateEndpointsCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult ``` -*azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl* - -```notalanguage - REDIRECTURL Sets Redirect URL for application with the security code callback +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCreateOrUpdate +```text +managedPrivateEndpointsCreateOrUpdate No summary provided + Creates a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully updated the managed private endpoint. + 201: Successfully created the managed private endpoint. + 202: Successfully accepted the managed private endpoint. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint ``` -*azure.identity.InteractiveBrowserCredentialBuilder.tenantId* - -```notalanguage - TENANTID Sets tenant id of user to authenticate through InteractiveBrowserCredential - An updated InteractiveBrowserCredentialBuilder is returned. +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsDelete +```text +managedPrivateEndpointsDelete No summary provided + Deletes a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- managed private endpoint deleted successfully. + 202: Accepted the delete managed private endpoint request. + 204: NoContent -- If the managed private endpoint resource is already deleted, this is the expected status code. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. ``` -*azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions* - -```notalanguage - tokenCachePersistenceOptions Sets tokenCachePersistenceOptions. +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsGet +```text +managedPrivateEndpointsGet No summary provided + Gets a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The managed private endpoint object. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint ``` +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsList -#### azure.identity.DeviceCodeCredential +```text +managedPrivateEndpointsList No summary provided + Returns the list of managed private endpoints. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of managed private endpoints. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpointListResult + + See Also: adx.control.models.ManagedPrivateEndpointListResult +``` -```notalanguage - DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsUpdate +```text +managedPrivateEndpointsUpdate No summary provided + Updates a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully updated the managed private endpoint. + 202: Accepted the update request of the managed private endpoint. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint ``` -*azure.identity.DeviceCodeCredential.authenticate* +### adx.control.api.OperationResults -```notalanguage - AUTHENTICATE Authenticates a user via the device code flow - Can take a azure.core.credential.TokenRequestContext as an optional argument. - Returns a reactor.core.publisher.Mono as a azure.identity.AuthenticationRecord. +Superclass: adx.control.BaseClient +```text +OperationResults No description provided + + OperationResults Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + OperationResults Methods: + + OperationResults - Constructor + operationsResultsGet - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` +#### adx.control.api.OperationResults.OperationResults -#### azure.identity.EnvironmentCredentialBuilder - -```notalanguage - ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder - +```text +OperationResults Constructor, creates a OperationResults instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.OperationResults(); + + % Create a client for alternative server/base URI + client = adx.control.api.OperationResults("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.OperationResults("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.OperationResults("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` -*azure.identity.EnvironmentCredentialBuilder.authorityHost* - -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated EnvironmentCredentialBuilder is returned. +#### adx.control.api.OperationResults.operationsResultsGet +```text +operationsResultsGet No summary provided + Returns operation results. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + operationId - The ID of an ongoing async operation., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the operation result. + 0: Error response describing why the operation failed. + + Returns: OperationResult + + See Also: adx.control.models.OperationResult ``` -*azure.identity.EnvironmentCredentialBuilder.build* +### adx.control.api.Operations -```notalanguage - BUILD Creates new EnvironmentCredential with the configured options set +Superclass: adx.control.BaseClient +```text +Operations No description provided + + Operations Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Operations Methods: + + Operations - Constructor + operationsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` +#### adx.control.api.Operations.Operations -#### azure.identity.ManagedIdentityCredential +```text +Operations Constructor, creates a Operations instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Operations(); + + % Create a client for alternative server/base URI + client = adx.control.api.Operations("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Operations("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Operations("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -```notalanguage - MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials +#### adx.control.api.Operations.operationsList +```text +operationsList No summary provided + Lists available operations for the Microsoft.Kusto provider. + + Required parameters: + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The operation was successful. The response contains the list of available operations. + 0: Error response describing why the operation failed. + + Returns: OperationListResult + + See Also: adx.control.models.OperationListResult ``` -*azure.identity.ManagedIdentityCredential.getClientId* +### adx.control.api.OutboundNetworkDependenciesEndpoints -```notalanguage - GETCLIENTID Gets the client ID of user assigned or system assigned identity - The client ID is returned as a character vector. +Superclass: adx.control.BaseClient +```text +OutboundNetworkDependenciesEndpoints No description provided + + OutboundNetworkDependenciesEndpoints Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + OutboundNetworkDependenciesEndpoints Methods: + + OutboundNetworkDependenciesEndpoints - Constructor + clustersListOutboundNetworkDependenciesEndpoints - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` +#### adx.control.api.OutboundNetworkDependenciesEndpoints.OutboundNetworkDependenciesEndpoints -#### azure.identity.SharedTokenCacheCredentialBuilder +```text +OutboundNetworkDependenciesEndpoints Constructor, creates a OutboundNetworkDependenciesEndpoints instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.OutboundNetworkDependenciesEndpoints(); + + % Create a client for alternative server/base URI + client = adx.control.api.OutboundNetworkDependenciesEndpoints("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.OutboundNetworkDependenciesEndpoints("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.OutboundNetworkDependenciesEndpoints("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -```notalanguage - SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential +#### adx.control.api.OutboundNetworkDependenciesEndpoints.clustersListOutboundNetworkDependenciesEndpoints +```text +clustersListOutboundNetworkDependenciesEndpoints No summary provided + Gets the network endpoints of all outbound dependencies of a Kusto cluster + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK + 0: Error from the RP + + Returns: OutboundNetworkDependenciesEndpointListResult + + See Also: adx.control.models.OutboundNetworkDependenciesEndpointListResult ``` -*azure.identity.SharedTokenCacheCredentialBuilder.authorityHost* +### adx.control.api.PrivateEndpointConnections -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated SharedTokenCacheCredentialBuilder is returned. +Superclass: adx.control.BaseClient +```text +PrivateEndpointConnections No description provided + + PrivateEndpointConnections Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + PrivateEndpointConnections Methods: + + PrivateEndpointConnections - Constructor + privateEndpointConnectionsCreateOrUpdate - + privateEndpointConnectionsDelete - + privateEndpointConnectionsGet - + privateEndpointConnectionsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` -*azure.identity.SharedTokenCacheCredentialBuilder.build* - -```notalanguage - BUILD Creates new SharedTokenCacheCredential with the configured options set +#### adx.control.api.PrivateEndpointConnections.PrivateEndpointConnections +```text +PrivateEndpointConnections Constructor, creates a PrivateEndpointConnections instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.PrivateEndpointConnections(); + + % Create a client for alternative server/base URI + client = adx.control.api.PrivateEndpointConnections("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.PrivateEndpointConnections("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.PrivateEndpointConnections("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` -*azure.identity.SharedTokenCacheCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated SharedTokenCacheCredentialBuilder is returned. +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsCreateOrUpdate +```text +privateEndpointConnectionsCreateOrUpdate No summary provided + Approve or reject a private endpoint connection with a given name. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + PrivateEndpointConnection - No description provided, Type: PrivateEndpointConnection + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully approved or rejected private endpoint connection. + 201: Accepted. The private endpoint connection update will complete asynchronously. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnection + + See Also: adx.control.models.PrivateEndpointConnection ``` -*azure.identity.SharedTokenCacheCredentialBuilder.tenantId* - -```notalanguage - TENANTID Sets tenant id to authenticate through SharedTokenCacheCredential - An updated SharedTokenCacheCredentialBuilder is returned. +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsDelete +```text +privateEndpointConnectionsDelete No summary provided + Deletes a private endpoint connection with a given name. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the private endpoint connection. + 202: Accepted. The private endpoint connection delete will complete asynchronously. + 204: Private endpoint connection does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. ``` -*azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions* - -```notalanguage - TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsGet +```text +privateEndpointConnectionsGet No summary provided + Gets a private endpoint connection. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved a specified private endpoint connection. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnection + + See Also: adx.control.models.PrivateEndpointConnection ``` +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsList -#### azure.identity.ClientSecretCredentialBuilder - -```notalanguage - CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder - +```text +privateEndpointConnectionsList No summary provided + Returns the list of private endpoint connections. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of private endpoint connections. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnectionListResult + + See Also: adx.control.models.PrivateEndpointConnectionListResult ``` -*azure.identity.ClientSecretCredentialBuilder.authorityHost* +### adx.control.api.PrivateLinkResources -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated ClientSecretCredentialBuilder is returned. +Superclass: adx.control.BaseClient +```text +PrivateLinkResources No description provided + + PrivateLinkResources Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + PrivateLinkResources Methods: + + PrivateLinkResources - Constructor + privateLinkResourcesGet - + privateLinkResourcesList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` -*azure.identity.ClientSecretCredentialBuilder.build* - -```notalanguage - BUILD Creates new ClientSecretCredential with the configured options set +#### adx.control.api.PrivateLinkResources.PrivateLinkResources +```text +PrivateLinkResources Constructor, creates a PrivateLinkResources instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.PrivateLinkResources(); + + % Create a client for alternative server/base URI + client = adx.control.api.PrivateLinkResources("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.PrivateLinkResources("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.PrivateLinkResources("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); ``` -*azure.identity.ClientSecretCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated ClientSecretCredentialBuilder is returned. +#### adx.control.api.PrivateLinkResources.privateLinkResourcesGet +```text +privateLinkResourcesGet No summary provided + Gets a private link resource. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateLinkResourceName - The name of the private link resource., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved a specified private link resource. + 0: Error response describing why the operation failed. + + Returns: PrivateLinkResource + + See Also: adx.control.models.PrivateLinkResource ``` -*azure.identity.ClientSecretCredentialBuilder.clientSecret* - -```notalanguage - CLIENTID Sets the client secret for the authentication - An updated ClientSecretCredentialBuilder is returned. +#### adx.control.api.PrivateLinkResources.privateLinkResourcesList +```text +privateLinkResourcesList No summary provided + Returns the list of private link resources. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved private link resources. + 0: Error response describing why the operation failed. + + Returns: PrivateLinkResourceListResult + + See Also: adx.control.models.PrivateLinkResourceListResult ``` -*azure.identity.ClientSecretCredentialBuilder.tenantId* +### adx.control.api.Scripts -```notalanguage - TENANTID Sets tenant id to authenticate through ClientSecretCredential - An updated ClientSecretCredentialBuilder is returned. +Superclass: adx.control.BaseClient +```text +Scripts No description provided + + Scripts Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Scripts Methods: + + Scripts - Constructor + scriptsListByDatabase - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient ``` +#### adx.control.api.Scripts.Scripts -#### azure.identity.ClientCertificateCredential +```text +Scripts Constructor, creates a Scripts instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Scripts(); + + % Create a client for alternative server/base URI + client = adx.control.api.Scripts("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Scripts("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Scripts("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` -```notalanguage - CLIENTCERTIFICATECREDENTIAL AAD credential acquires a token with a client certificate +#### adx.control.api.Scripts.scriptsListByDatabase +```text +scriptsListByDatabase No summary provided + Returns the list of database scripts for given database. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of Kusto database scripts. + 0: Error response describing why the operation failed. + + Returns: ScriptListResult + + See Also: adx.control.models.ScriptListResult ``` +### adx.control.models -#### azure.identity.InteractiveBrowserCredential +### adx.control.models.AcceptedAudiences -```notalanguage - INTERACTIVEBROWSERCREDENTIAL Prompt the login in the default browser - An AAD credential that acquires a token for an AAD application by prompting - the login in the default browser. - The oauth2 flow will notify the credential of the authentication code through - the reply URL. - The application to authenticate to must have delegated user login permissions - and have http://localhost:{port} listed as a valid reply URL. +Superclass: adx.control.JSONMapper +```text +AcceptedAudiences Represents an accepted audience trusted by the cluster. + + AcceptedAudiences Properties: + value - GUID or valid URL representing an accepted audience. - type: string ``` +#### adx.control.models.AcceptedAudiences.AcceptedAudiences -#### azure.identity.SharedTokenCacheCredential +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - DEVICECODECREDENTIAL A credential provider that provides token - credentials from the MSAL shared token cache. +### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 +Superclass: adx.control.JSONEnum + +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided ``` -*azure.identity.SharedTokenCacheCredential.restGetSas* +```text +Enumeration values: + Union + Replace + None + +``` -```notalanguage -azure.identity.SharedTokenCacheCredential.restGetSas is an undocumented builtin static method or package function. +#### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided ``` -*azure.identity.SharedTokenCacheCredential.restFlow* +### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 -```notalanguage -azure.identity.SharedTokenCacheCredential.restFlow is an undocumented builtin static method or package function. +Superclass: adx.control.JSONEnum +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided ``` +```text +Enumeration values: + Union + Replace + None -#### azure.identity.ChainedTokenCredentialBuilder +``` -```notalanguage - CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential +#### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided ``` -*azure.identity.ChainedTokenCredentialBuilder.addLast* +### adx.control.models.AttachedDatabaseConfiguration -```notalanguage - ADDLAST Adds a credential to try to authenticate at the end of the chain +Superclass: adx.control.JSONMapper +```text +AttachedDatabaseConfiguration Class representing an attached database configuration. + + AttachedDatabaseConfiguration Properties: + location - Resource location. - type: string + xproperties - type: AttachedDatabaseConfigurationProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.identity.ChainedTokenCredentialBuilder.build* - -```notalanguage - BUILD Creates new ChainedTokenCredential with the configured options set +#### adx.control.models.AttachedDatabaseConfiguration.AttachedDatabaseConfiguration +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.AttachedDatabaseConfigurationListResult -#### azure.identity.EnvironmentCredential +Superclass: adx.control.JSONMapper -```notalanguage - ENVIRONMENTCREDENTIAL Provides token credentials based on environment variables - The environment variables expected are: - AZURE_CLIENT_ID - AZURE_CLIENT_SECRET - AZURE_TENANT_ID - or: - AZURE_CLIENT_ID - AZURE_CLIENT_CERTIFICATE_PATH - AZURE_TENANT_ID - or: - AZURE_CLIENT_ID - AZURE_USERNAME - AZURE_PASSWORD +```text +AttachedDatabaseConfigurationListResult The list attached database configurations operation response. + + AttachedDatabaseConfigurationListResult Properties: + value - The list of attached database configurations. - type: array of AttachedDatabaseConfiguration +``` +#### adx.control.models.AttachedDatabaseConfigurationListResult.AttachedDatabaseConfigurationListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.AttachedDatabaseConfigurationProperties -#### azure.identity.DefaultAzureCredential +Superclass: adx.control.JSONMapper -```notalanguage - DEFAULTAZURECREDENTIAL Creates credential from environment or the shared token - It tries to create a valid credential in the following order: - EnvironmentCredential - ManagedIdentityCredential - SharedTokenCacheCredential - IntelliJCredential - VisualStudioCodeCredential - AzureCliCredential - Fails if none of the credentials above could be created. +```text +AttachedDatabaseConfigurationProperties Class representing the an attached database configuration properties of kind specific. + + AttachedDatabaseConfigurationProperties Properties: + provisioningState - type: ProvisioningState + databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + defaultPrincipalsModificationKind - The default principals modification kind - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string +``` + +#### adx.control.models.AttachedDatabaseConfigurationProperties.AttachedDatabaseConfigurationProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.AttachedDatabaseConfigurationProperties_1 -#### azure.identity.AzureCliCredentialBuilder +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfigurationProperties_1 Class representing the an attached database configuration properties of kind specific. + + AttachedDatabaseConfigurationProperties_1 Properties: + provisioningState - type: ProvisioningState + databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + defaultPrincipalsModificationKind - The default principals modification kind - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string +``` -```notalanguage - AZURECLICREDENTIALBUILDER Credential builder for instantiating a AzureCliCredential +#### adx.control.models.AttachedDatabaseConfigurationProperties_1.AttachedDatabaseConfigurationProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.AzureCliCredentialBuilder.build* +### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest -```notalanguage - BUILD Creates new AzureCliCredential with the configured options set +Superclass: adx.control.JSONMapper +```text +AttachedDatabaseConfigurationsCheckNameRequest The result returned from a AttachedDatabaseConfigurations check name availability request. + + AttachedDatabaseConfigurationsCheckNameRequest Properties: + name - Attached database resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/attachedDatabaseConfigurations. - type: string ``` +#### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest.AttachedDatabaseConfigurationsCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -#### azure.identity.DeviceCodeInfo +### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum -```notalanguage - DEVICECODEINFO Contains details of a device code request. +Superclass: adx.control.JSONEnum +```text +AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided ``` -*azure.identity.DeviceCodeInfo.getExpiresOn* +```text +Enumeration values: + Microsoft_Kusto_clusters_attachedDatabaseConfigurations -```notalanguage - GETEXPIRESON Gets the expiration time of device code. - Returns a datetime object. +``` +#### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum + +```text +AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided ``` -*azure.identity.DeviceCodeInfo.getMessage* +### adx.control.models.AzureCapacity -```notalanguage - GETMESSAGE Gets the message which should be displayed to the user. - Returns a character vector. +Superclass: adx.control.JSONMapper +```text +AzureCapacity Azure capacity definition. + + AzureCapacity Properties: + scaleType - Scale type. - type: string + minimum - Minimum allowed capacity. - type: int32 + maximum - Maximum allowed capacity. - type: int32 + default - The default capacity that would be used. - type: int32 ``` -*azure.identity.DeviceCodeInfo.getUserCode* - -```notalanguage - GETUSERCODE Gets the code which user needs to provide when authenticating - at the verification URL. - Returns a character vector. +#### adx.control.models.AzureCapacity.AzureCapacity +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.DeviceCodeInfo.getVerificationUrl* +### adx.control.models.AzureCapacityScaleTypeEnum -```notalanguage - GETVERIFICATIONURL Gets the URL where user can authenticate. - Returns a character vector. +Superclass: adx.control.JSONEnum +```text +AzureCapacityScaleTypeEnum No description provided ``` +```text +Enumeration values: + automatic + manual + none -#### azure.identity.ClientSecretCredential +``` -```notalanguage - CLIENTSECRETCREDENTIAL AAD credential acquires a token with a client secret +#### adx.control.models.AzureCapacityScaleTypeEnum.AzureCapacityScaleTypeEnum +```text +AzureCapacityScaleTypeEnum No description provided ``` +### adx.control.models.AzureResourceSku -#### azure.identity.DeviceCodeCredentialBuilder +Superclass: adx.control.JSONMapper -```notalanguage - DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential. - - The DeviceCodeCredentialBuilder constructor in MATLAB always applies - disableAutomaticAuthentication to avoid any automatic authentication - attempts by clients during which MATLAB will not be able to display the - device code. If a client requires authentication for a certain scope and - your DeviceCodeCredential has not been authenticated for this (yet), an - error will be thrown. +```text +AzureResourceSku Azure resource SKU definition. - See: - https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication() + AzureResourceSku Properties: + resourceType - Resource Namespace and Type. - type: string + sku - type: AzureSku + capacity - type: AzureCapacity +``` +#### adx.control.models.AzureResourceSku.AzureResourceSku + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.DeviceCodeCredentialBuilder.authorityHost* +### adx.control.models.AzureResourceSku_1 -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated DeviceCodeCredentialBuilder is returned. +Superclass: adx.control.JSONMapper +```text +AzureResourceSku_1 Azure resource SKU definition. + + AzureResourceSku_1 Properties: + resourceType - Resource Namespace and Type. - type: string + sku - type: AzureSku + capacity - type: AzureCapacity ``` -*azure.identity.DeviceCodeCredentialBuilder.build* - -```notalanguage - BUILD Not Supported in MATLAB - - When working with DeviceCodeCredential, MATLAB requires the credential - object to be pre-authorized before passing it to an Azure client. Please - build and also immediately authorize the DeviceCodeCredential using the - 'buildAndAuthenticate' method instead. +#### adx.control.models.AzureResourceSku_1.AzureResourceSku_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate* +### adx.control.models.AzureSku -```notalanguage - BUILDANDAUTHENTICATE Creates new DeviceCodeCredential with the configured - options set and also immediately authenticates it with the requested - tokenRequestContext. +Superclass: adx.control.JSONMapper + +```text +AzureSku Azure SKU definition. - By default this method will print the device code information: - - To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code ILOVEMATLAB to authenticate. - - To the MATLAB Command Window. Optionally a function handle - challengeConsumer can be provided to customize the message or how to - display it. This function will be called with a DeviceCodeInfo object as - input. - - An authenticated DeviceCodeCredential is returned. + AzureSku Properties: + name - SKU name. - type: string + capacity - The number of instances of the cluster. - type: int32 + tier - SKU tier. - type: string +``` + +#### adx.control.models.AzureSku.AzureSku + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AzureSkuNameEnum + +Superclass: adx.control.JSONEnum + +```text +AzureSkuNameEnum No description provided +``` + +```text +Enumeration values: + Dev_No_SLA_Standard_D11_v2 + Dev_No_SLA_Standard_E2a_v4 + Standard_D11_v2 + Standard_D12_v2 + Standard_D13_v2 + Standard_D14_v2 + Standard_D32d_v4 + Standard_D16d_v5 + Standard_D32d_v5 + Standard_DS13_v21TB_PS + Standard_DS13_v22TB_PS + Standard_DS14_v23TB_PS + Standard_DS14_v24TB_PS + Standard_L4s + Standard_L8s + Standard_L16s + Standard_L8s_v2 + Standard_L16s_v2 + Standard_L8s_v3 + Standard_L16s_v3 + Standard_L32s_v3 + Standard_L8as_v3 + Standard_L16as_v3 + Standard_L32as_v3 + Standard_E64i_v3 + Standard_E80ids_v4 + Standard_E2a_v4 + Standard_E4a_v4 + Standard_E8a_v4 + Standard_E16a_v4 + Standard_E8as_v41TB_PS + Standard_E8as_v42TB_PS + Standard_E16as_v43TB_PS + Standard_E16as_v44TB_PS + Standard_E8as_v51TB_PS + Standard_E8as_v52TB_PS + Standard_E16as_v53TB_PS + Standard_E16as_v54TB_PS + Standard_E2ads_v5 + Standard_E4ads_v5 + Standard_E8ads_v5 + Standard_E16ads_v5 + Standard_EC8as_v51TB_PS + Standard_EC8as_v52TB_PS + Standard_EC16as_v53TB_PS + Standard_EC16as_v54TB_PS + Standard_EC8ads_v5 + Standard_EC16ads_v5 + Standard_E8s_v41TB_PS + Standard_E8s_v42TB_PS + Standard_E16s_v43TB_PS + Standard_E16s_v44TB_PS + Standard_E8s_v51TB_PS + Standard_E8s_v52TB_PS + Standard_E16s_v53TB_PS + Standard_E16s_v54TB_PS + Standard_E2d_v4 + Standard_E4d_v4 + Standard_E8d_v4 + Standard_E16d_v4 + Standard_E2d_v5 + Standard_E4d_v5 + Standard_E8d_v5 + Standard_E16d_v5 ``` -*azure.identity.DeviceCodeCredentialBuilder.clientId* - -```notalanguage - CLIENTID Sets client id - An updated DeviceCodeCredentialBuilder is returned. +#### adx.control.models.AzureSkuNameEnum.AzureSkuNameEnum +```text +AzureSkuNameEnum No description provided ``` -*azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication* +### adx.control.models.AzureSkuTierEnum -```notalanguage - DISABLEAUTOMATICAUTHENTICATION Disables the automatic authentication and - prevents the DeviceCodeCredential from automatically prompting the user. - If automatic authentication is disabled a AuthenticationRequiredException - will be thrown from getToken(TokenRequestContext request) in the case - that user interaction is necessary. - - An updated DeviceCodeCredentialBuilder is returned. +Superclass: adx.control.JSONEnum +```text +AzureSkuTierEnum No description provided ``` -*azure.identity.DeviceCodeCredentialBuilder.maxRetry* - -```notalanguage - MAXRETRY Sets max number of retries when an authentication request fails - An updated DeviceCodeCredentialBuilder is returned. +```text +Enumeration values: + Basic + Standard ``` -*azure.identity.DeviceCodeCredentialBuilder.tenantId* +#### adx.control.models.AzureSkuTierEnum.AzureSkuTierEnum -```notalanguage - TENANTID Sets tenant id to authenticate through DeviceCodeCredential - An updated DeviceCodeCredentialBuilder is returned. +```text +AzureSkuTierEnum No description provided +``` + +### adx.control.models.BlobStorageEventType + +Superclass: adx.control.JSONEnum + +```text +BlobStorageEventType The name of blob storage event type to process. +``` + +```text +Enumeration values: + Microsoft_Storage_BlobCreated + Microsoft_Storage_BlobRenamed ``` -*azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions* - -```notalanguage - TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +#### adx.control.models.BlobStorageEventType.BlobStorageEventType +```text +BlobStorageEventType The name of blob storage event type to process. ``` +### adx.control.models.CheckNameRequest -#### azure.identity.ChainedTokenCredential - -```notalanguage - CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers +Superclass: adx.control.JSONMapper +```text +CheckNameRequest The result returned from a database check name availability request. + + CheckNameRequest Properties: + name - Resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/databases. - type: string ``` +#### adx.control.models.CheckNameRequest.CheckNameRequest -#### azure.identity.DefaultAzureCredentialBuilder - -```notalanguage - DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.DefaultAzureCredentialBuilder.authorityHost* +### adx.control.models.CheckNameRequestTypeEnum -```notalanguage - AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens - An updated DefaultAzureCredentialBuilder is returned. +Superclass: adx.control.JSONEnum +```text +CheckNameRequestTypeEnum No description provided ``` -*azure.identity.DefaultAzureCredentialBuilder.build* - -```notalanguage - BUILD Creates new DefaultAzureCredential with the configured options set +```text +Enumeration values: + Microsoft_Kusto_clusters_databases + Microsoft_Kusto_clusters_attachedDatabaseConfigurations ``` -*azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId* - -```notalanguage - MANAGEDIDENTITYCLIENTID Specifies client ID of user or system assigned identity - This credential can be used when in an environment with managed identities. - If unset, the value in the AZURE_CLIENT_ID environment variable will be used. - If neither is set, the default value is null and will only work with system - assigned managed identities and not user assigned managed identities. - An updated DefaultAzureCredentialBuilder is returned. +#### adx.control.models.CheckNameRequestTypeEnum.CheckNameRequestTypeEnum +```text +CheckNameRequestTypeEnum No description provided ``` -*azure.identity.DefaultAzureCredentialBuilder.tenantId* +### adx.control.models.CheckNameResult -```notalanguage - TENANTID Sets tenant id of user to authenticate through DefaultAzureCredential - An updated DefaultAzureCredentialBuilder is returned. +Superclass: adx.control.JSONMapper +```text +CheckNameResult The result returned from a check name availability request. + + CheckNameResult Properties: + nameAvailable - Specifies a Boolean value that indicates if the name is available. - type: logical + name - The name that was checked. - type: string + message - Message indicating an unavailable name due to a conflict, or a description of the naming rules that are violated. - type: string + reason - Message providing the reason why the given name is invalid. - type: string ``` +#### adx.control.models.CheckNameResult.CheckNameResult -#### azure.identity.AzureCliCredential +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - AZURECLICREDENTIAL Provides token credentials based on Azure CLI command - If the CLI is installed and authenticated there is no need to further - authenticate within MATLAB. - A object is created based on a corresponding Java com.azure.identity.AzureCliCredential - object. +### adx.control.models.CheckNameResultReasonEnum + +Superclass: adx.control.JSONEnum +```text +CheckNameResultReasonEnum No description provided ``` +```text +Enumeration values: + Invalid + AlreadyExists -#### azure.identity.AuthenticationRecord +``` -```notalanguage - Represents the account information relating to an authentication request - Held as a Java reactor.core.publisher.MonoMap. +#### adx.control.models.CheckNameResultReasonEnum.CheckNameResultReasonEnum +```text +CheckNameResultReasonEnum No description provided ``` -*azure.identity.AuthenticationRecord.subscribe* +### adx.control.models.Cluster -```notalanguage - SUBSCRIBE Subscribe to this Mono and request unbounded demand - Used to trigger the device code challenge flow. - Returns a Java reactor.core.publisher.LambdaMonoSubscriber object. - The return value is not normally required. +Superclass: adx.control.JSONMapper +```text +Cluster Class representing a Kusto cluster. + + Cluster Properties: + sku - type: AzureSku + systemData - type: systemData + zones - An array represents the availability zones of the cluster. - type: array of string + identity - type: Identity + xproperties - type: ClusterProperties_1 + etag - A unique read-only string that changes whenever the resource is updated. - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` +#### adx.control.models.Cluster.Cluster -#### azure.identity.TokenCachePersistenceOptions +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - TOKENREQUESTCONTEXT Contains details of a request to get a token - Can be created based on a corresponding com.azure.core.credential.TokenRequestContext - Java object argument or without an argument where further configuration is - required to add scopes. +### adx.control.models.ClusterCheckNameRequest -``` +Superclass: adx.control.JSONMapper -*azure.identity.TokenCachePersistenceOptions.getName* +```text +ClusterCheckNameRequest The result returned from a cluster check name availability request. + + ClusterCheckNameRequest Properties: + name - Cluster name. - type: string + type - The type of resource, Microsoft.Kusto/clusters. - type: string +``` -```notalanguage - GETNAME Get the name. - Returns a character vector. +#### adx.control.models.ClusterCheckNameRequest.ClusterCheckNameRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.identity.TokenCachePersistenceOptions.setName* +### adx.control.models.ClusterCheckNameRequestTypeEnum -```notalanguage - SETNAME Set the name. - Returns an updated azure.core.identity.TokenCachePersistenceOptions. +Superclass: adx.control.JSONEnum +```text +ClusterCheckNameRequestTypeEnum No description provided ``` +```text +Enumeration values: + Microsoft_Kusto_clusters -#### azure.storage.common.StorageSharedKeyCredential +``` -```notalanguage - STORAGESHAREDKEYCREDENTIAL SharedKey credential policy - Used to put into a header to authorize requests. +#### adx.control.models.ClusterCheckNameRequestTypeEnum.ClusterCheckNameRequestTypeEnum +```text +ClusterCheckNameRequestTypeEnum No description provided ``` -*azure.storage.common.StorageSharedKeyCredential.getAccountName* +### adx.control.models.ClusterListResult -```notalanguage - GETACCOUNTNAME Gets the account name associated with the request - The accountName is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +ClusterListResult The list Kusto clusters operation response. + + ClusterListResult Properties: + value - The list of Kusto clusters. - type: array of Cluster ``` +#### adx.control.models.ClusterListResult.ClusterListResult -#### azure.storage.common.sas.AccountSasResourceType - -```notalanguage - ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services - Setting a value to true means that any SAS which uses these permissions will - grant access to that resource type. - Once the required values are set serialize the object with toString for use - as the resources field on an AccountSasSignatureValues object. - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasResourceType.parse* +### adx.control.models.ClusterMigrateRequest -```notalanguage - PARSE Creates an AccountSasResourceType from the specified permissions string - Creates an AccountSasResourceType from the specified resource types string. - Throws an IllegalArgumentException if passed a character that does not - correspond to a valid resource type. - Expected characters are s, c, or o. - A azure.storage.common.sas.AccountSasResourceType object is returned. - resourceTypesString should be of type scalar string or character vector. - This is a static method. +Superclass: adx.control.JSONMapper +```text +ClusterMigrateRequest A cluster migrate request. + + ClusterMigrateRequest Properties: + clusterResourceId - Resource ID of the destination cluster or kusto pool. - type: string ``` -*azure.storage.common.sas.AccountSasResourceType.isContainer* - -```notalanguage - ISCONTAINER Returns true if the resource is a Container otherwise false +#### adx.control.models.ClusterMigrateRequest.ClusterMigrateRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasResourceType.isObject* +### adx.control.models.ClusterPrincipalAssignment -```notalanguage - ISOBJECT Returns true if the resource is an object otherwise false +Superclass: adx.control.JSONMapper +```text +ClusterPrincipalAssignment Class representing a cluster principal assignment. + + ClusterPrincipalAssignment Properties: + xproperties - type: ClusterPrincipalProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.common.sas.AccountSasResourceType.isService* - -```notalanguage - ISSERVICE Returns true if the resource is a Service otherwise false +#### adx.control.models.ClusterPrincipalAssignment.ClusterPrincipalAssignment +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasResourceType.setContainer* +### adx.control.models.ClusterPrincipalAssignmentCheckNameRequest -```notalanguage - SETCONTAINER Sets the access status for container level APIs - Grants access to Blob Containers, Tables, Queues, and File Shares. - The container argument should be of type logical. - A azure.storage.common.sas.AccountSasResourceType object is returned. +Superclass: adx.control.JSONMapper +```text +ClusterPrincipalAssignmentCheckNameRequest A principal assignment check name availability request. + + ClusterPrincipalAssignmentCheckNameRequest Properties: + name - Principal Assignment resource name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/principalAssignments. - type: string ``` -*azure.storage.common.sas.AccountSasResourceType.setObject* - -```notalanguage - SETOBJECT Sets the access status for object level APIs - Grants access to Blobs, Table Entities, Queue Messages, Files. - The object argument should be of type logical. - A azure.storage.common.sas.AccountSasResourceType object is returned. +#### adx.control.models.ClusterPrincipalAssignmentCheckNameRequest.ClusterPrincipalAssignmentCheckNameRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasResourceType.setService* +### adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum -```notalanguage - SETSERVICE Sets the access status for service level APIs - The service argument should be of type logical. - A azure.storage.common.sas.AccountSasResourceType service is returned. +Superclass: adx.control.JSONEnum +```text +ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasResourceType.toString* +```text +Enumeration values: + Microsoft_Kusto_clusters_principalAssignments -```notalanguage - TOSTRING Converts the given permissions to a String - This method is used to serialize an AccountSasResourceType - A character vector is returned. +``` + +#### adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum.ClusterPrincipalAssignmentCheckNameRequestTypeEnum +```text +ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided ``` +### adx.control.models.ClusterPrincipalAssignmentListResult -#### azure.storage.common.sas.AccountSasService - -```notalanguage - ACCOUNTSASSERVICE Construct a string representing the Account SAS services - Setting a value to true means that any SAS which uses these permissions will - grant access to that service. Once required values are set the object should - be serialized with toString and set as the services field on an - AccountSasSignatureValues object. +Superclass: adx.control.JSONMapper +```text +ClusterPrincipalAssignmentListResult The list Kusto cluster principal assignments operation response. + + ClusterPrincipalAssignmentListResult Properties: + value - The list of Kusto cluster principal assignments. - type: array of ClusterPrincipalAssignment ``` -*azure.storage.common.sas.AccountSasService.parse* - -```notalanguage - PARSE Creates an AccountSasService from the specified permissions string - A azure.storage.common.sas.AccountSasService object is returned. - servicesString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid service. - Expected characters are b, f, q, or t. - This is a static method. +#### adx.control.models.ClusterPrincipalAssignmentListResult.ClusterPrincipalAssignmentListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasService.hasBlobAccess* +### adx.control.models.ClusterPrincipalProperties -```notalanguage - HASBLOBACCESS Returns the access status for blob resources - The result is returned as a logical +Superclass: adx.control.JSONMapper +```text +ClusterPrincipalProperties A class representing cluster principal property. + + ClusterPrincipalProperties Properties: + principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + role - Cluster principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string ``` -*azure.storage.common.sas.AccountSasService.hasFileAccess* - -```notalanguage - HASFILEACCESS Returns the access status for file resources - The result is returned as a logical +#### adx.control.models.ClusterPrincipalProperties.ClusterPrincipalProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasService.hasQueueAccess* +### adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum -```notalanguage - HASQUEUEACCESS Returns the access status for queue resources - The result is returned as a logical +Superclass: adx.control.JSONEnum +```text +ClusterPrincipalPropertiesPrincipalTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasService.hasTableAccess* +```text +Enumeration values: + App + Group + User -```notalanguage - HASTABLEACCESS Returns the access status for table resources - The result is returned as a logical +``` +#### adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum.ClusterPrincipalPropertiesPrincipalTypeEnum + +```text +ClusterPrincipalPropertiesPrincipalTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasService.setBlobAccess* +### adx.control.models.ClusterPrincipalPropertiesRoleEnum -```notalanguage - SETBLOBACCESS Sets the access status for blob resources - The blob argument should be of type logical. - A azure.storage.common.sas.AccountSasService object is returned. +Superclass: adx.control.JSONEnum +```text +ClusterPrincipalPropertiesRoleEnum No description provided ``` -*azure.storage.common.sas.AccountSasService.setFileAccess* +```text +Enumeration values: + AllDatabasesAdmin + AllDatabasesViewer -```notalanguage - SETFILEACCESS Sets the access status for file resources - The file argument should be of type logical. - A azure.storage.common.sas.AccountSasService object is returned. +``` +#### adx.control.models.ClusterPrincipalPropertiesRoleEnum.ClusterPrincipalPropertiesRoleEnum + +```text +ClusterPrincipalPropertiesRoleEnum No description provided ``` -*azure.storage.common.sas.AccountSasService.setQueueAccess* +### adx.control.models.ClusterPrincipalProperties_1 -```notalanguage - SETQUEUEACCESS Sets the access status for queue resources - The queue argument should be of type logical. - A azure.storage.common.sas.AccountSasService object is returned. +Superclass: adx.control.JSONMapper +```text +ClusterPrincipalProperties_1 A class representing cluster principal property. + + ClusterPrincipalProperties_1 Properties: + principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + role - Cluster principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string ``` -*azure.storage.common.sas.AccountSasService.setTableAccess* - -```notalanguage - SETTABLEACCESS Sets the access status for table resources - The table argument should be of type logical. - A azure.storage.common.sas.AccountSasService object is returned. +#### adx.control.models.ClusterPrincipalProperties_1.ClusterPrincipalProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasService.toString* +### adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +Superclass: adx.control.JSONEnum +```text +ClusterPrincipalProperties_1PrincipalTypeEnum No description provided ``` +```text +Enumeration values: + App + Group + User -#### azure.storage.common.sas.AccountSasSignatureValues +``` -```notalanguage - ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account - When the values are set, use the generateSas method on the desired service - client to obtain a representation of the SAS which can then be applied to a - new client using the .sasToken(String) method on the desired client builder. - - Example - assv = azure.storage.common.sas.AccountSasSignatureValues( ... - expiryTime, permissions, services, resourceTypes); - - Argument types: - expiryTime: datetime - permissions: azure.storage.common.sas.AccountSasPermission - services: azure.storage.common.sas.AccountSasService - resourceTypes: azure.storage.common.sas.AccountSasResourceType +#### adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum.ClusterPrincipalProperties_1PrincipalTypeEnum +```text +ClusterPrincipalProperties_1PrincipalTypeEnum No description provided ``` +### adx.control.models.ClusterPrincipalProperties_1RoleEnum -#### azure.storage.common.sas.AccountSasPermission - -```notalanguage - ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. - Once the required values are set, the object should be serialized with - toString and set as the permissions field on an AccountSasSignatureValues - object +Superclass: adx.control.JSONEnum +```text +ClusterPrincipalProperties_1RoleEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.parse* +```text +Enumeration values: + AllDatabasesAdmin + AllDatabasesViewer -```notalanguage - PARSE Creates an AccountSasPermission from the specified permissions string - A azure.storage.common.sas.AccountSasPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. - Expected characters are r, w, d, l, a, c, u, or p. +``` + +#### adx.control.models.ClusterPrincipalProperties_1RoleEnum.ClusterPrincipalProperties_1RoleEnum +```text +ClusterPrincipalProperties_1RoleEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasAddPermission* +### adx.control.models.ClusterProperties -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +ClusterProperties Class representing the Kusto cluster properties. + + ClusterProperties Properties: + state - The state of the resource. - type: string + provisioningState - type: ProvisioningState + uri - The cluster URI. - type: string + dataIngestionUri - The cluster data ingestion URI. - type: string + stateReason - The reason for the cluster''s current state. - type: string + trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + optimizedAutoscale - type: OptimizedAutoscale + enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + virtualNetworkConfiguration - type: VirtualNetworkConfiguration + keyVaultProperties - type: KeyVaultProperties + enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + languageExtensions - type: LanguageExtensionsList + enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + engineType - The engine type - type: string + acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + migrationCluster - type: MigrationClusterProperties ``` -*azure.storage.common.sas.AccountSasPermission.hasCreatePermission* - -```notalanguage - HASCREATEPERMISSION Returns the create permission status - The result is returned as a logical +#### adx.control.models.ClusterProperties.ClusterProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasPermission.hasDeletePermission* +### adx.control.models.ClusterPropertiesEngineTypeEnum -```notalanguage - HASDELETEPERMISSION Returns the delete permission status - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +ClusterPropertiesEngineTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasListPermission* +```text +Enumeration values: + V2 + V3 -```notalanguage - HASLISTPERMISSION Returns the list permission status - The result is returned as a logical. +``` + +#### adx.control.models.ClusterPropertiesEngineTypeEnum.ClusterPropertiesEngineTypeEnum +```text +ClusterPropertiesEngineTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasProcessMessages* +### adx.control.models.ClusterPropertiesPublicIPTypeEnum -```notalanguage - HASPROCESSMESSAGES Returns the process messages permission - This allows the retrieval and deletion of queue messages. - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +ClusterPropertiesPublicIPTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasReadPermission* +```text +Enumeration values: + IPv4 + DualStack -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +``` +#### adx.control.models.ClusterPropertiesPublicIPTypeEnum.ClusterPropertiesPublicIPTypeEnum + +```text +ClusterPropertiesPublicIPTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasUpdatePermission* +### adx.control.models.ClusterPropertiesPublicNetworkAccessEnum -```notalanguage - HASUPDATEPERMISSION Returns the update permission status - It allows the update of queue message and tables. - This allows the retrieval and deletion of queue messages. - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +ClusterPropertiesPublicNetworkAccessEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.hasWritePermission* +```text +Enumeration values: + Enabled + Disabled -```notalanguage - HASWRITEPERMISSION Returns the write permission status - The result is returned as a logical. +``` +#### adx.control.models.ClusterPropertiesPublicNetworkAccessEnum.ClusterPropertiesPublicNetworkAccessEnum + +```text +ClusterPropertiesPublicNetworkAccessEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setAddPermission* +### adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +Superclass: adx.control.JSONEnum +```text +ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setCreatePermission* +```text +Enumeration values: + Enabled + Disabled -```notalanguage - SETCREATEPERMISSION Sets the create permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +``` +#### adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum.ClusterPropertiesRestrictOutboundNetworkAccessEnum + +```text +ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setDeletePermission* +### adx.control.models.ClusterPropertiesStateEnum -```notalanguage - SETDELETEPERMISSION Sets the delete permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +Superclass: adx.control.JSONEnum +```text +ClusterPropertiesStateEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setListPermission* +```text +Enumeration values: + Creating + Unavailable + Running + Deleting + Deleted + Stopping + Stopped + Starting + Updating + Migrated -```notalanguage - SETLISTPERMISSION Sets the list permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +``` +#### adx.control.models.ClusterPropertiesStateEnum.ClusterPropertiesStateEnum + +```text +ClusterPropertiesStateEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setProcessMessages* +### adx.control.models.ClusterProperties_1 -```notalanguage - SETPROCESSMESSAGES Sets the process messages permission - This allows the retrieval and deletion of queue messages. - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +ClusterProperties_1 Class representing the Kusto cluster properties. + + ClusterProperties_1 Properties: + state - The state of the resource. - type: string + provisioningState - type: ProvisioningState + uri - The cluster URI. - type: string + dataIngestionUri - The cluster data ingestion URI. - type: string + stateReason - The reason for the cluster''s current state. - type: string + trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + optimizedAutoscale - type: OptimizedAutoscale + enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + virtualNetworkConfiguration - type: VirtualNetworkConfiguration + keyVaultProperties - type: KeyVaultProperties + enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + languageExtensions - type: LanguageExtensionsList + enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + engineType - The engine type - type: string + acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + migrationCluster - type: MigrationClusterProperties ``` -*azure.storage.common.sas.AccountSasPermission.setReadPermission* - -```notalanguage - SETREADPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +#### adx.control.models.ClusterProperties_1.ClusterProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.common.sas.AccountSasPermission.setUpdatePermission* +### adx.control.models.ClusterProperties_1EngineTypeEnum -```notalanguage - SETUPDATEPERMISSION Sets the update permission status - This allows the update of queue messages and tables. - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +Superclass: adx.control.JSONEnum +```text +ClusterProperties_1EngineTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.setWritePermission* +```text +Enumeration values: + V2 + V3 -```notalanguage - SETWRITEPERMISSION Sets the write permission status - The permission argument should be of type logical. - A azure.storage.common.sas.AccountSasPermission object is returned. +``` +#### adx.control.models.ClusterProperties_1EngineTypeEnum.ClusterProperties_1EngineTypeEnum + +```text +ClusterProperties_1EngineTypeEnum No description provided ``` -*azure.storage.common.sas.AccountSasPermission.toString* +### adx.control.models.ClusterProperties_1PublicIPTypeEnum -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +Superclass: adx.control.JSONEnum +```text +ClusterProperties_1PublicIPTypeEnum No description provided ``` +```text +Enumeration values: + IPv4 + DualStack -#### azure.storage.common.policy.RequestRetryOptions +``` -```notalanguage - REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory - The default constructor azure.storage.common.policy.RequestRetryOptions() returns an - object with retry values: - - retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional - A RetryPolicyType specifying the type of retry pattern - to use, default value is EXPONENTIAL - - maxTries: Optional int32 - Maximum number of attempts an operation will be retried - default is 4 - - tryTimeoutInSeconds: Optional int32 - Specifies the maximum time allowed before a request is - cancelled and assumed failed, default is intmax s - - retryDelayInMs: Optional int64 - Specifies the amount of delay to use before retrying an - operation, default value is 4ms - - maxRetryDelayInMs: Optional int64 - Specifies the maximum delay allowed before retrying an - operation, default value is 120ms - - secondaryHost: Optional character vector or scalar string +#### adx.control.models.ClusterProperties_1PublicIPTypeEnum.ClusterProperties_1PublicIPTypeEnum +```text +ClusterProperties_1PublicIPTypeEnum No description provided ``` +### adx.control.models.ClusterProperties_1PublicNetworkAccessEnum -#### azure.storage.common.policy.RetryPolicyType +Superclass: adx.control.JSONEnum -```notalanguage - RetryPolicyType Defines holds possible options for retry backoff algorithms - They may be used with RequestRetryOptions. - Values are EXPONENTIAL & FIXED +```text +ClusterProperties_1PublicNetworkAccessEnum No description provided +``` + +```text +Enumeration values: + Enabled + Disabled ``` +#### adx.control.models.ClusterProperties_1PublicNetworkAccessEnum.ClusterProperties_1PublicNetworkAccessEnum -```notalanguage -Enumeration: - EXPONENTIAL - FIXED +```text +ClusterProperties_1PublicNetworkAccessEnum No description provided ``` -*azure.storage.common.policy.RetryPolicyType.valueOf* +### adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum -```notalanguage - VALUEOF Returns the enum constant of this type with the specified name +Superclass: adx.control.JSONEnum +```text +ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided ``` -*azure.storage.common.policy.RetryPolicyType.toJava* +```text +Enumeration values: + Enabled + Disabled + +``` -```notalanguage - TOJAVA Converts to a com.azure.storage.common.policy.RetryPolicyType Java object +#### adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum.ClusterProperties_1RestrictOutboundNetworkAccessEnum +```text +ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided ``` -*azure.storage.common.policy.RetryPolicyType.toString* +### adx.control.models.ClusterProperties_1StateEnum -```notalanguage - TOSTRING Returns text form of a RetryPolicyType - A character vector is returned. +Superclass: adx.control.JSONEnum +```text +ClusterProperties_1StateEnum No description provided ``` +```text +Enumeration values: + Creating + Unavailable + Running + Deleting + Deleted + Stopping + Stopped + Starting + Updating + Migrated -#### azure.storage.queue.QueueServiceClientBuilder +``` -```notalanguage - QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients +#### adx.control.models.ClusterProperties_1StateEnum.ClusterProperties_1StateEnum +```text +ClusterProperties_1StateEnum No description provided ``` -*azure.storage.queue.QueueServiceClientBuilder.buildClient* +### adx.control.models.ClusterUpdate -```notalanguage - BUILDCLIENT Creates a QueueServiceClient based on options set in the builder - A built QueueServiceClient object is returned. +Superclass: adx.control.JSONMapper +```text +ClusterUpdate Class representing an update to a Kusto cluster. + + ClusterUpdate Properties: + tags - Resource tags. - type: adx.control.JSONMapperMap + location - Resource location. - type: string + sku - type: AzureSku + identity - type: Identity + xproperties - type: ClusterProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.queue.QueueServiceClientBuilder.connectionString* - -```notalanguage - CONNECTIONSTRING Sets the connection string to connect to the service - connectionString should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ClusterUpdate.ClusterUpdate +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueServiceClientBuilder.credential* +### adx.control.models.Compression -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. - An updated builder object is returned. +Superclass: adx.control.JSONEnum +```text +Compression The compression type ``` -*azure.storage.queue.QueueServiceClientBuilder.endpoint* +```text +Enumeration values: + None + GZip -```notalanguage - ENDPOINT Sets the client endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +``` +#### adx.control.models.Compression.Compression + +```text +Compression The compression type ``` -*azure.storage.queue.QueueServiceClientBuilder.httpClient* +### adx.control.models.CosmosDbDataConnection -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +CosmosDbDataConnection Class representing a CosmosDb data connection. + + CosmosDbDataConnection Properties: + xproperties - type: CosmosDbDataConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.queue.QueueServiceClientBuilder.sasToken* - -```notalanguage - sasToken Sets the SAS token used to authorize requests - sasToken should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.CosmosDbDataConnection.CosmosDbDataConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.CosmosDbDataConnectionProperties + +Superclass: adx.control.JSONMapper -#### azure.storage.queue.QueueServiceClient +```text +CosmosDbDataConnectionProperties Class representing the Kusto CosmosDb data connection properties. + + CosmosDbDataConnectionProperties Properties: + tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityObjectId - The object ID of the managed identity resource. - type: string + cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + provisioningState - type: ProvisioningState +``` -```notalanguage - QUEUESERVICECLIENT Service client performs generic queue operations +#### adx.control.models.CosmosDbDataConnectionProperties.CosmosDbDataConnectionProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueServiceClient.createQueue* +### adx.control.models.CosmosDbDataConnectionProperties_1 -```notalanguage - CREATEQUEUE Creates a queue in with the specified name - A QueueClient is returned. +Superclass: adx.control.JSONMapper +```text +CosmosDbDataConnectionProperties_1 Class representing the Kusto CosmosDb data connection properties. + + CosmosDbDataConnectionProperties_1 Properties: + tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityObjectId - The object ID of the managed identity resource. - type: string + cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + provisioningState - type: ProvisioningState ``` -*azure.storage.queue.QueueServiceClient.deleteQueue* - -```notalanguage - DELETEQUEUE Deletes a queue in with the specified name +#### adx.control.models.CosmosDbDataConnectionProperties_1.CosmosDbDataConnectionProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueServiceClient.generateAccountSas* +### adx.control.models.DataConnection -```notalanguage - GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account - The client must be authenticated via StorageSharedKeyCredential - The SAS is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +DataConnection Class representing an data connection. + + DataConnection Properties: + location - Resource location. - type: string + kind - Kind of the endpoint for the data connection - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.queue.QueueServiceClient.getAccountName* - -```notalanguage - GETACCOUNTNAME Get associated account name - A character vector is returned. +#### adx.control.models.DataConnection.DataConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueServiceClient.getQueueClient* +### adx.control.models.DataConnectionCheckNameRequest -```notalanguage - GETQUEUECLIENT Constructs a QueueClient that interacts with the specified queue - A QueueClient is returned. +Superclass: adx.control.JSONMapper +```text +DataConnectionCheckNameRequest A data connection check name availability request. + + DataConnectionCheckNameRequest Properties: + name - Data Connection name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/dataConnections. - type: string ``` -*azure.storage.queue.QueueServiceClient.getQueueServiceUrl* - -```notalanguage - GETQUEUESERVICEURL Gets the URL of the storage queue +#### adx.control.models.DataConnectionCheckNameRequest.DataConnectionCheckNameRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueServiceClient.listQueues* +### adx.control.models.DataConnectionCheckNameRequestTypeEnum -```notalanguage - Lists all queues in the storage account without their metadata - TODO listQueues probably SDK bug - Only the fist page of queues is - currently listed. +Superclass: adx.control.JSONEnum +```text +DataConnectionCheckNameRequestTypeEnum No description provided ``` +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_dataConnections -#### azure.storage.queue.QueueClient +``` -```notalanguage - QUEUECLIENT Client performs generic queue operations +#### adx.control.models.DataConnectionCheckNameRequestTypeEnum.DataConnectionCheckNameRequestTypeEnum +```text +DataConnectionCheckNameRequestTypeEnum No description provided ``` -*azure.storage.queue.QueueClient.delete* +### adx.control.models.DataConnectionKindEnum -```notalanguage - DELETE QueueClient destructor - in MATLAB delete is a - reserved method name for the class destructor. This method - does not delete Queues on Azure. To delete the Azure - Queue use the deleteQueue method in MATLAB. +Superclass: adx.control.JSONEnum +```text +DataConnectionKindEnum No description provided ``` -*azure.storage.queue.QueueClient.clearMessages* +```text +Enumeration values: + EventHub + EventGrid + IotHub + CosmosDb + +``` -```notalanguage - CLEARMESSAGES Deletes all messages in the queue +#### adx.control.models.DataConnectionKindEnum.DataConnectionKindEnum +```text +DataConnectionKindEnum No description provided ``` -*azure.storage.queue.QueueClient.create* +### adx.control.models.DataConnectionListResult -```notalanguage - CREATE Creates a new queue +Superclass: adx.control.JSONMapper +```text +DataConnectionListResult The list Kusto data connections operation response. + + DataConnectionListResult Properties: + value - The list of Kusto data connections. - type: array of DataConnection ``` -*azure.storage.queue.QueueClient.deleteMessage* - -```notalanguage - DELETEMESSAGE Deletes the specified message from the queue - The messageId and popReceipt arguments should be of type character vector or - scalar string +#### adx.control.models.DataConnectionListResult.DataConnectionListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClient.deleteQueue* +### adx.control.models.DataConnectionValidation -```notalanguage - DELETEQUEUE Deletes the queue +Superclass: adx.control.JSONMapper +```text +DataConnectionValidation Class representing an data connection validation. + + DataConnectionValidation Properties: + dataConnectionName - The name of the data connection. - type: string + xproperties - type: DataConnection ``` -*azure.storage.queue.QueueClient.generateSas* - -```notalanguage - GENERATESAS Generates a SAS for the queue - The client must be authenticated via StorageSharedKeyCredential - The SAS is returned as a character vector. +#### adx.control.models.DataConnectionValidation.DataConnectionValidation +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClient.getAccountName* +### adx.control.models.DataConnectionValidationListResult -```notalanguage - GETACCOUNTNAME Get associated account name - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +DataConnectionValidationListResult The list Kusto data connection validation result. + + DataConnectionValidationListResult Properties: + value - The list of Kusto data connection validation errors. - type: array of DataConnectionValidationResult ``` -*azure.storage.queue.QueueClient.getQueueName* - -```notalanguage - GETQUEUENAME Get associated account name - A character vector is returned. +#### adx.control.models.DataConnectionValidationListResult.DataConnectionValidationListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClient.getQueueUrl* +### adx.control.models.DataConnectionValidationResult -```notalanguage - GETQUEUEURL Get associated URL - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +DataConnectionValidationResult The result returned from a data connection validation request. + + DataConnectionValidationResult Properties: + errorMessage - A message which indicates a problem in data connection validation. - type: string ``` -*azure.storage.queue.QueueClient.peekMessage* - -```notalanguage - PEEKMESSAGE Peeks the first message in the queue - A peek request retrieves a message from the front of the queue without - changing its visibility. If no message is found an empty double is - returned. +#### adx.control.models.DataConnectionValidationResult.DataConnectionValidationResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClient.receiveMessage* +### adx.control.models.Database -```notalanguage - RECEIVEMESSAGE Retrieves the first message in the queue - The message is hidden from other operations for 30 seconds. - If no message is found an empty double is returned. +Superclass: adx.control.JSONMapper +```text +Database Class representing a Kusto database. + + Database Properties: + location - Resource location. - type: string + kind - Kind of the database - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.queue.QueueClient.sendMessage* - -```notalanguage - SENDMESSAGE Sends a message that has a time-to-live of 7 days - The message is instantly visible. - A SendMessageResult is returned. +#### adx.control.models.Database.Database +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.DatabaseInviteFollowerRequest + +Superclass: adx.control.JSONMapper -#### azure.storage.queue.QueueClientBuilder +```text +DatabaseInviteFollowerRequest The request to invite a follower to a database. + + DatabaseInviteFollowerRequest Properties: + inviteeEmail - The email of the invited user for which the follower invitation is generated. - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties +``` -```notalanguage - QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients +#### adx.control.models.DatabaseInviteFollowerRequest.DatabaseInviteFollowerRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClientBuilder.buildClient* +### adx.control.models.DatabaseInviteFollowerResult -```notalanguage - BUILDCLIENT Creates a QueueClient based on options set in the builder - A built QueueClient object is returned. +Superclass: adx.control.JSONMapper +```text +DatabaseInviteFollowerResult The result returned from a follower invitation generation request. + + DatabaseInviteFollowerResult Properties: + generatedInvitation - The generated invitation token. - type: string ``` -*azure.storage.queue.QueueClientBuilder.connectionString* - -```notalanguage - CONNECTIONSTRING Sets the connection string to connect to the service - connectionString should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.DatabaseInviteFollowerResult.DatabaseInviteFollowerResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClientBuilder.credential* +### adx.control.models.DatabaseKindEnum -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. - An updated builder object is returned. +Superclass: adx.control.JSONEnum +```text +DatabaseKindEnum No description provided ``` -*azure.storage.queue.QueueClientBuilder.endpoint* +```text +Enumeration values: + ReadWrite + ReadOnlyFollowing -```notalanguage - ENDPOINT Sets the client endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +``` + +#### adx.control.models.DatabaseKindEnum.DatabaseKindEnum +```text +DatabaseKindEnum No description provided ``` -*azure.storage.queue.QueueClientBuilder.httpClient* +### adx.control.models.DatabaseListResult -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +DatabaseListResult The list Kusto databases operation response. + + DatabaseListResult Properties: + nextLink - Link to the next page of results - type: string + value - The list of Kusto databases. - type: array of Database ``` -*azure.storage.queue.QueueClientBuilder.queueName* - -```notalanguage - QUEUENAME Sets the name of the container that contains the queue - containerName should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.DatabaseListResult.DatabaseListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.QueueClientBuilder.sasToken* +### adx.control.models.DatabasePrincipal -```notalanguage - sasToken Sets the SAS token used to authorize requests - sasToken should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipal A class representing database principal entity. + + DatabasePrincipal Properties: + role - Database principal role. - type: string + name - Database principal name. - type: string + type - Database principal type. - type: string + fqn - Database principal fully qualified name. - type: string + email - Database principal email if exists. - type: string + appId - Application id - relevant only for application principal type. - type: string + tenantName - The tenant name of the principal - type: string ``` +#### adx.control.models.DatabasePrincipal.DatabasePrincipal + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -#### azure.storage.queue.models.SendMessageResult +### adx.control.models.DatabasePrincipalAssignment -```notalanguage - SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalAssignment Class representing a database principal assignment. + + DatabasePrincipalAssignment Properties: + xproperties - type: DatabasePrincipalProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.queue.models.SendMessageResult.getExpirationTime* - -```notalanguage - GETEXPIRATIONTIME Time the Message will expire and be automatically deleted - A datetime value is returned, with time zone configured for UTC. +#### adx.control.models.DatabasePrincipalAssignment.DatabasePrincipalAssignment +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.SendMessageResult.getInsertionTime* +### adx.control.models.DatabasePrincipalAssignmentCheckNameRequest -```notalanguage - GETINSERTIONTIME Get the time the Message was inserted into the queue - A datetime value is returned, with time zone configured for UTC. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalAssignmentCheckNameRequest A principal assignment check name availability request. + + DatabasePrincipalAssignmentCheckNameRequest Properties: + name - Principal Assignment resource name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/principalAssignments. - type: string ``` -*azure.storage.queue.models.SendMessageResult.getPopReceipt* - -```notalanguage - GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message - A character vector is returned. +#### adx.control.models.DatabasePrincipalAssignmentCheckNameRequest.DatabasePrincipalAssignmentCheckNameRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.SendMessageResult.getTimeNextVisible* +### adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum -```notalanguage - GETTIMENEXTVISIBLE Get the timeNextVisible property - The time that the message will again become visible in the Queue. - A datetime value is returned, with time zone configured for UTC. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided ``` +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_principalAssignments -#### azure.storage.queue.models.PeekedMessageItem +``` -```notalanguage - PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue +#### adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum.DatabasePrincipalAssignmentCheckNameRequestTypeEnum +```text +DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided ``` -*azure.storage.queue.models.PeekedMessageItem.getDequeueCount* +### adx.control.models.DatabasePrincipalAssignmentListResult -```notalanguage - GETDEQUEUECOUNT Get the number of times the message has been dequeued - An int64 is returned. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalAssignmentListResult The list Kusto database principal assignments operation response. + + DatabasePrincipalAssignmentListResult Properties: + value - The list of Kusto database principal assignments. - type: array of DatabasePrincipalAssignment ``` -*azure.storage.queue.models.PeekedMessageItem.getExpirationTime* - -```notalanguage - GETEXPIRATIONTIME Get the time the Message was inserted into the queue - A datetime value is returned, with time zone configured for UTC. +#### adx.control.models.DatabasePrincipalAssignmentListResult.DatabasePrincipalAssignmentListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.PeekedMessageItem.getInsertionTime* +### adx.control.models.DatabasePrincipalListRequest -```notalanguage - GETINSERTIONTIME Get the time the Message was inserted into the queue - A datetime value is returned, with time zone configured for UTC. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalListRequest The list Kusto database principals operation request. + + DatabasePrincipalListRequest Properties: + value - The list of Kusto database principals. - type: array of DatabasePrincipal ``` -*azure.storage.queue.models.PeekedMessageItem.getMessageId* - -```notalanguage - GETMESSAGEID Get the Id of the Message - A character vector is returned. +#### adx.control.models.DatabasePrincipalListRequest.DatabasePrincipalListRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.PeekedMessageItem.getMessageText* +### adx.control.models.DatabasePrincipalListResult -```notalanguage - GETMESSAGETEXT Get the content of the Message - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalListResult The list Kusto database principals operation response. + + DatabasePrincipalListResult Properties: + value - The list of Kusto database principals. - type: array of DatabasePrincipal ``` -*azure.storage.queue.models.PeekedMessageItem.setDequeueCount* - -```notalanguage - SETDEQUEUECOUNT Set the DequeueCount property - The DequeueCount may be of type integer - A PeekedMessageItem is returned. +#### adx.control.models.DatabasePrincipalListResult.DatabasePrincipalListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.PeekedMessageItem.setExpirationTime* +### adx.control.models.DatabasePrincipalProperties -```notalanguage - SETEXPIRATIONTIME The time the Message was inserted into the Queue - Expiration time should be of type datetime with a time zone set. - A PeekedMessageItem is returned. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalProperties A class representing database principal property. + + DatabasePrincipalProperties Properties: + principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + role - Database principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string ``` -*azure.storage.queue.models.PeekedMessageItem.setInsertionTime* - -```notalanguage - SETINSERTIONTIME The time the Message was inserted into the Queue - Insertion time should be of type datetime with a time zone set. - A PeekedMessageItem is returned. +#### adx.control.models.DatabasePrincipalProperties.DatabasePrincipalProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.PeekedMessageItem.setMessageId* +### adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum -```notalanguage - SETMESSAGEID Set the messageId property - The messageId may be of type character vector or scalar string - A PeekedMessageItem is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalPropertiesPrincipalTypeEnum No description provided ``` -*azure.storage.queue.models.PeekedMessageItem.setMessageText* - -```notalanguage - SETMESSAGETEXT Set the messageId property - The messageText may be of type character vector or scalar string - A PeekedMessageItem is returned. +```text +Enumeration values: + App + Group + User ``` +#### adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum.DatabasePrincipalPropertiesPrincipalTypeEnum -#### azure.storage.queue.models.QueueMessageItem - -```notalanguage - QUEUEMESSAGEITEM Returned when calling Get Messages on a queue - +```text +DatabasePrincipalPropertiesPrincipalTypeEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.getDequeueCount* +### adx.control.models.DatabasePrincipalPropertiesRoleEnum -```notalanguage - GETDEQUEUECOUNT Get the number of times the message has been dequeued - An int64 is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalPropertiesRoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.getExpirationTime* - -```notalanguage - GETEXPIRATIONTIME Get the time the Message was inserted into the queue - A datetime value is returned, with time zone configured for UTC. +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer ``` -*azure.storage.queue.models.QueueMessageItem.getInsertionTime* - -```notalanguage - GETINSERTIONTIME Get the time the Message was inserted into the queue - A datetime value is returned, with time zone configured for UTC. +#### adx.control.models.DatabasePrincipalPropertiesRoleEnum.DatabasePrincipalPropertiesRoleEnum +```text +DatabasePrincipalPropertiesRoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.getMessageId* +### adx.control.models.DatabasePrincipalProperties_1 -```notalanguage - GETMESSAGEID Get the Id of the Message - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +DatabasePrincipalProperties_1 A class representing database principal property. + + DatabasePrincipalProperties_1 Properties: + principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + role - Database principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string ``` -*azure.storage.queue.models.QueueMessageItem.getMessageText* - -```notalanguage - GETMESSAGETEXT Get the content of the Message - A character vector is returned. +#### adx.control.models.DatabasePrincipalProperties_1.DatabasePrincipalProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.models.QueueMessageItem.getPopReceipt* +### adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum -```notalanguage - GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message - A character vector is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalProperties_1PrincipalTypeEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.getTimeNextVisible* - -```notalanguage - GETTIMENEXTVISIBLE Get the timeNextVisible property - The time that the message will again become visible in the Queue. - A datetime value is returned, with time zone configured for UTC. +```text +Enumeration values: + App + Group + User ``` -*azure.storage.queue.models.QueueMessageItem.setDequeueCount* - -```notalanguage - SETDEQUEUECOUNT Set the DequeueCount property - The DequeueCount may be of type integer - A QueueMessageItem is returned. +#### adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum.DatabasePrincipalProperties_1PrincipalTypeEnum +```text +DatabasePrincipalProperties_1PrincipalTypeEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.setExpirationTime* +### adx.control.models.DatabasePrincipalProperties_1RoleEnum -```notalanguage - SETEXPIRATIONTIME The time the Message was inserted into the Queue - Expiration time should be of type datetime with a time zone set. - A QueueMessageItem is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalProperties_1RoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.setInsertionTime* - -```notalanguage - SETINSERTIONTIME The time the Message was inserted into the Queue - Insertion time should be of type datetime with a time zone set. - A QueueMessageItem is returned. +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer ``` -*azure.storage.queue.models.QueueMessageItem.setMessageId* - -```notalanguage - SETMESSAGEID Set the messageId property - The messageId may be of type character vector or scalar string - A QueueMessageItem is returned. +#### adx.control.models.DatabasePrincipalProperties_1RoleEnum.DatabasePrincipalProperties_1RoleEnum +```text +DatabasePrincipalProperties_1RoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.setMessageText* +### adx.control.models.DatabasePrincipalRoleEnum -```notalanguage - SETMESSAGETEXT Set the messageId property - The messageText may be of type character vector or scalar string - A QueueMessageItem is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalRoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.setPopReceipt* +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer -```notalanguage - SETPOPRECEIPT Set the messageId property - The popReceipt may be of type character vector or scalar string - A QueueMessageItem is returned. +``` +#### adx.control.models.DatabasePrincipalRoleEnum.DatabasePrincipalRoleEnum + +```text +DatabasePrincipalRoleEnum No description provided ``` -*azure.storage.queue.models.QueueMessageItem.setTimeNextVisible* +### adx.control.models.DatabasePrincipalTypeEnum -```notalanguage - SETTIMENEXTVISIBLE Set the timeNextVisible property - The time that the message will again become visible in the Queue. - The time should be of type datetime with a time zone set. - A QueueMessageItem is returned. +Superclass: adx.control.JSONEnum +```text +DatabasePrincipalTypeEnum No description provided ``` +```text +Enumeration values: + App + Group + User -#### azure.storage.queue.models.QueueProperties +``` -```notalanguage - QUEUEPROPERTIES Class containing properties of a specific queue +#### adx.control.models.DatabasePrincipalTypeEnum.DatabasePrincipalTypeEnum +```text +DatabasePrincipalTypeEnum No description provided ``` -*azure.storage.queue.models.QueueProperties.getApproximateMessageCount* +### adx.control.models.DatabaseShareOrigin -```notalanguage - GETAPPROXIMATEMESSAGECOUNT Gets the approximate number of messages in the queue - Applies at the time of properties retrieval. - An int64 is returned. +Superclass: adx.control.JSONEnum +```text +DatabaseShareOrigin The origin of the following setup. ``` +```text +Enumeration values: + Direct + DataShare + Other -#### azure.storage.queue.models.QueueItem +``` -```notalanguage - QUEUEITEM Azure Storage Queue +#### adx.control.models.DatabaseShareOrigin.DatabaseShareOrigin +```text +DatabaseShareOrigin The origin of the following setup. ``` -*azure.storage.queue.models.QueueItem.getName* +### adx.control.models.DatabaseStatistics -```notalanguage - GETNAME Returns the queue's name as a character vector +Superclass: adx.control.JSONMapper +```text +DatabaseStatistics A class that contains database statistics information. + + DatabaseStatistics Properties: + size - The database size - the total size of compressed data and index in bytes. - type: double ``` +#### adx.control.models.DatabaseStatistics.DatabaseStatistics -#### azure.storage.queue.sas.QueueSasPermission - -```notalanguage - QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. - Once the required values are set, the object should be serialized with - toString and set as the permissions field on a QueueSasSignatureValues - object - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.sas.QueueSasPermission.parse* +### adx.control.models.DiagnoseVirtualNetworkResult -```notalanguage - PARSE Creates a QueueSasPermission from the specified permissions string - A azure.storage.queue.sas.QueueSasPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. - Expected characters are r, a, u, or p. +Superclass: adx.control.JSONMapper +```text +DiagnoseVirtualNetworkResult No description provided + + DiagnoseVirtualNetworkResult Properties: + findings - The list of network connectivity diagnostic finding - type: array of string ``` -*azure.storage.queue.sas.QueueSasPermission.hasAddPermission* - -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +#### adx.control.models.DiagnoseVirtualNetworkResult.DiagnoseVirtualNetworkResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.sas.QueueSasPermission.hasProcessPermission* +### adx.control.models.EndpointDependency -```notalanguage - HASPROCESSPERMISSION Returns the process permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +EndpointDependency A domain name that a service is reached at, including details of the current connection status. + + EndpointDependency Properties: + domainName - The domain name of the dependency. - type: string + endpointDetails - The ports used when connecting to DomainName. - type: array of EndpointDetail ``` -*azure.storage.queue.sas.QueueSasPermission.hasReadPermission* - -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +#### adx.control.models.EndpointDependency.EndpointDependency +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission* +### adx.control.models.EndpointDetail -```notalanguage - HASUPDATEPERMISSION Returns the update permission status - The result is returned as a logical +Superclass: adx.control.JSONMapper +```text +EndpointDetail Current TCP connectivity information from the Kusto cluster to a single endpoint. + + EndpointDetail Properties: + port - The port an endpoint is connected to. - type: int32 ``` -*azure.storage.queue.sas.QueueSasPermission.setAddPermission* - -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.queue.sas.QueueSasPermission object is returned. +#### adx.control.models.EndpointDetail.EndpointDetail +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.sas.QueueSasPermission.setProcessPermission* +### adx.control.models.ErrorAdditionalInfo -```notalanguage - SETPROCESSPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.queue.sas.QueueSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +ErrorAdditionalInfo The resource management error additional info. + + ErrorAdditionalInfo Properties: + type - The additional info type. - type: string + info - The additional info. - type: object ``` -*azure.storage.queue.sas.QueueSasPermission.setReadPermission* - -```notalanguage - SETREADPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.queue.sas.QueueSasPermission object is returned. +#### adx.control.models.ErrorAdditionalInfo.ErrorAdditionalInfo +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.queue.sas.QueueSasPermission.setUpdatePermission* - -```notalanguage - SETUPDATEPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.queue.sas.QueueSasPermission object is returned. +#### adx.control.models.ErrorAdditionalInfo.disp +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. + + If X is a string or character array, the text is displayed. + + See also formattedDisplayText, sprintf, num2str, format, details. ``` -*azure.storage.queue.sas.QueueSasPermission.toString* +### adx.control.models.ErrorDetail -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +ErrorDetail The error detail. + + ErrorDetail Properties: + code - The error code. - type: string + message - The error message. - type: string + target - The error target. - type: string + details - The error details. - type: array of ErrorDetail + additionalInfo - The error additional info. - type: array of ErrorAdditionalInfo ``` +#### adx.control.models.ErrorDetail.ErrorDetail -#### azure.storage.queue.sas.QueueServiceSasSignatureValues +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service - When the values are set, use the generateSas method on the desired service - client to obtain a representation of the SAS which can then be applied to a - new client using the .sasToken(String) method on the desired client builder. +#### adx.control.models.ErrorDetail.disp + +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. - Example - qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions); + If X is a string or character array, the text is displayed. - Argument types: - expiryTime: datetime - permissions: azure.storage.queue.sas.QueueSasPermission - + See also formattedDisplayText, sprintf, num2str, format, details. ``` +### adx.control.models.ErrorResponse -#### azure.storage.file.datalake.DataLakeFileClient - -```notalanguage - DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake - This client is instantiated through DataLakePathClientBuilder or retrieved via - getFileClient(). +Superclass: adx.control.JSONMapper +```text +ErrorResponse Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.). + + ErrorResponse Properties: + error - type: ErrorDetail ``` -*azure.storage.file.datalake.DataLakeFileClient.delete* - -```notalanguage - DELETE DataLakeFileClient destructor - in MATLAB delete is a reserved - method name for the class destructor. This method does not delete - files on Azure. To delete the Azure files use the deleteFile - method in MATLAB. +#### adx.control.models.ErrorResponse.ErrorResponse +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeFileClient.deleteFile* +#### adx.control.models.ErrorResponse.disp -```notalanguage - DELETEFILE Deletes the file - this is the equivalent of the "delete" - method in the Azure Java API but because "delete" is a reserved - method name in MATLAB, the method is named deleteFile. +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. - Example: - client.deleteFile() - + If X is a string or character array, the text is displayed. + + See also formattedDisplayText, sprintf, num2str, format, details. ``` -*azure.storage.file.datalake.DataLakeFileClient.exists* +### adx.control.models.EventGridConnectionProperties -```notalanguage - EXISTS Gets if the path this client represents exists in Azure - This does not guarantee that the path type (file/directory) matches expectations. - E.g. a DataLakeFileClient representing a path to a datalake directory will - return true, and vice versa. +Superclass: adx.control.JSONMapper +```text +EventGridConnectionProperties Class representing the Kusto event grid connection properties. + + EventGridConnectionProperties Properties: + storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventGridDataFormat + ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + blobStorageEventType - type: BlobStorageEventType + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + provisioningState - type: ProvisioningState ``` -*azure.storage.file.datalake.DataLakeFileClient.getFilePath* - -```notalanguage - GETFILEPATH Gets the path of this file, not including the name of the resource itself - A character vector is returned. +#### adx.control.models.EventGridConnectionProperties.EventGridConnectionProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeFileClient.getFileUrl* +### adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum -```notalanguage - GETFILEURL Gets the URL of the file represented by this client - A matlab.net.URI is returned. +Superclass: adx.control.JSONEnum +```text +EventGridConnectionPropertiesDatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileClient.readToFile* - -```notalanguage - READTOFILE Reads the entire file into a file specified by the path - By default a file will not be overwritten and if the file already exists a - FileAlreadyExistsException Java will be thrown. A logical overwrite flag - can be optionally provided. - An azure.storage.file.datalake.models.PathProperties is returned. +```text +Enumeration values: + Single + Multi ``` -*azure.storage.file.datalake.DataLakeFileClient.rename* - -```notalanguage - RENAME Moves the file to another location within the file system - Arguments must be scalar strings or character vectors. - - destinationFileSystem is the file system of the destination within the account. - Use a string or character vector of zero length for the current file system. - - destinationPath is the relative path from the file system to rename the file to. - This excludes the file system name, e.g. to move a file with: - fileSystem = "myfilesystem", path = "mydir/hello.txt" - to another path in myfilesystem e.g.: newdir/hi.txt - then set the destinationPath = "newdir/hi.txt" - - A DataLakeFileClient used to interact with the newly created file is returned. +#### adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum.EventGridConnectionPropertiesDatabaseRoutingEnum +```text +EventGridConnectionPropertiesDatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileClient.uploadFromFile* +### adx.control.models.EventGridConnectionProperties_1 -```notalanguage - UPLOADFROMFILE Creates a file with the content of the specified file - By default, this method will not overwrite an existing file. - filePath is provided as a character vector or scalar string. +Superclass: adx.control.JSONMapper +```text +EventGridConnectionProperties_1 Class representing the Kusto event grid connection properties. + + EventGridConnectionProperties_1 Properties: + storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventGridDataFormat + ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + blobStorageEventType - type: BlobStorageEventType + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + provisioningState - type: ProvisioningState ``` +#### adx.control.models.EventGridConnectionProperties_1.EventGridConnectionProperties_1 -#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder - -```notalanguage - DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient* +### adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum -```notalanguage - BUILDFILESYSTEMCLIENT Creates a DataLakeFileSystemClient based on the builder - Returns a DataLakeFileSystemClient created from the configurations in this builder. +Superclass: adx.control.JSONEnum +```text +EventGridConnectionProperties_1DatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential* - -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential - or azure.core.credential.TokenCredential. - An updated builder object is returned. +```text +Enumeration values: + Single + Multi ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint* - -```notalanguage - ENDPOINT Sets the client endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum.EventGridConnectionProperties_1DatabaseRoutingEnum +```text +EventGridConnectionProperties_1DatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName* +### adx.control.models.EventGridDataConnection -```notalanguage - FILESYSTEMNAME Sets the name of the file/directory - If the path name contains special characters, pass in the url encoded version - of the path name. - A azure.storage.file.datalake.DataLakeFileSystemClientBuilder is returned. +Superclass: adx.control.JSONMapper +```text +EventGridDataConnection Class representing an Event Grid data connection. + + EventGridDataConnection Properties: + xproperties - type: EventGridConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +#### adx.control.models.EventGridDataConnection.EventGridDataConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken* +### adx.control.models.EventGridDataFormat -```notalanguage - SASTOKEN Sets the SAS token used to authorize requests sent to the service - This string should only be the query parameters (with or without a leading - '?') and not a full url. - An updated builder is returned. +Superclass: adx.control.JSONEnum +```text +EventGridDataFormat The data format of the message. Optionally the data format can be added to each message. ``` +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE -#### azure.storage.file.datalake.DataLakeFileSystemClient +``` -```notalanguage - DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations - This client is instantiated through DataLakeFileSystemClientBuilder +#### adx.control.models.EventGridDataFormat.EventGridDataFormat +```text +EventGridDataFormat The data format of the message. Optionally the data format can be added to each message. ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.delete* +### adx.control.models.EventHubConnectionProperties -```notalanguage - DELETE DataLakeFileSystemClient destructor - in MATLAB delete is a reserved - method name for the class destructor. This method does not delete - files on Azure. To delete the Azure files use the deleteFileSystem - method in MATLAB. +Superclass: adx.control.JSONMapper +```text +EventHubConnectionProperties Class representing the Kusto event hub connection properties. + + EventHubConnectionProperties Properties: + eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventHubDataFormat + eventSystemProperties - System properties of the event hub - type: array of string + compression - type: Compression + provisioningState - type: ProvisioningState + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory* - -```notalanguage - CREATEDIRECTORY Creates a new directory within a file system - By default, this method will not overwrite an existing directory. - To enable overwrite set an overwrite argument to true. - A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +#### adx.control.models.EventHubConnectionProperties.EventHubConnectionProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory* +### adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum -```notalanguage - DELETEDIRECTORY Deletes the specified directory - - Example: - client.deleteDirectory('myDirectory') +Superclass: adx.control.JSONEnum +```text +EventHubConnectionPropertiesDatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile* +```text +Enumeration values: + Single + Multi -```notalanguage - DELETEFILE Deletes the file - this is the equivalent of the "delete" - method in the Azure Java API but because "delete" is a reserved - method name in MATLAB, the method is named deleteFile. - - Example: - client.deleteFile('myfile.txt') +``` +#### adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum.EventHubConnectionPropertiesDatabaseRoutingEnum + +```text +EventHubConnectionPropertiesDatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.generateSas* +### adx.control.models.EventHubConnectionProperties_1 -```notalanguage - GENERATESAS Generates a SAS for the blob - The client must be authenticated via StorageSharedKeyCredential - The SAS is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +EventHubConnectionProperties_1 Class representing the Kusto event hub connection properties. + + EventHubConnectionProperties_1 Properties: + eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventHubDataFormat + eventSystemProperties - System properties of the event hub - type: array of string + compression - type: Compression + provisioningState - type: ProvisioningState + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime ``` -*azure.storage.file.datalake.DataLakeFileSystemClient.listPaths* +#### adx.control.models.EventHubConnectionProperties_1.EventHubConnectionProperties_1 -```notalanguage - LISTPATHS Returns a list of files/directories in this account - Paths are returned as an array of - azure.storage.file.datalake.models.PathItem objects. - If there are no keys an empty array is returned. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum + +Superclass: adx.control.JSONEnum +```text +EventHubConnectionProperties_1DatabaseRoutingEnum No description provided ``` +```text +Enumeration values: + Single + Multi -#### azure.storage.file.datalake.DataLakePathClientBuilder +``` -```notalanguage - DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient +#### adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum.EventHubConnectionProperties_1DatabaseRoutingEnum +```text +EventHubConnectionProperties_1DatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient* +### adx.control.models.EventHubDataConnection -```notalanguage - BUILDDIRECTORYCLIENT Creates a DataLakeDirectoryClient based on the builder - Returns a buildDirectoryClient created from the configurations in this builder. +Superclass: adx.control.JSONMapper +```text +EventHubDataConnection Class representing an event hub data connection. + + EventHubDataConnection Properties: + xproperties - type: EventHubConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient* - -```notalanguage - BUILDFILECLIENT Creates a DataLakeFileClient based on options set in the builder - Returns a DataLakeFileClient created from the configurations in this builder. +#### adx.control.models.EventHubDataConnection.EventHubDataConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.credential* +### adx.control.models.EventHubDataFormat -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential - or azure.core.credential.TokenCredential. - An updated builder object is returned. +Superclass: adx.control.JSONEnum +```text +EventHubDataFormat The data format of the message. Optionally the data format can be added to each message. ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.endpoint* +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE -```notalanguage - ENDPOINT Sets the client endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +``` +#### adx.control.models.EventHubDataFormat.EventHubDataFormat + +```text +EventHubDataFormat The data format of the message. Optionally the data format can be added to each message. ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName* +### adx.control.models.FollowerDatabaseDefinition -```notalanguage - fileSystemName Sets the name of the file system that contains the path - If the value null or empty the root file system, $root, will be used. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +FollowerDatabaseDefinition A class representing follower database request. + + FollowerDatabaseDefinition Properties: + clusterResourceId - Resource id of the cluster that follows a database owned by this cluster. - type: string + attachedDatabaseConfigurationName - Resource name of the attached database configuration in the follower cluster. - type: string + databaseName - The database name owned by this cluster that was followed. * in case following all databases. - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseShareOrigin - type: DatabaseShareOrigin ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +#### adx.control.models.FollowerDatabaseDefinition.FollowerDatabaseDefinition +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.pathName* +### adx.control.models.FollowerDatabaseListResult -```notalanguage - PATHNAME Sets the name of the file/directory - If the path name contains special characters, pass in the url encoded version - of the path name. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +FollowerDatabaseListResult The list Kusto database principals operation response. + + FollowerDatabaseListResult Properties: + value - The list of follower database result. - type: array of FollowerDatabaseDefinition ``` -*azure.storage.file.datalake.DataLakePathClientBuilder.sasToken* - -```notalanguage - SASTOKEN Sets the SAS token used to authorize requests sent to the service - This string should only be the query parameters (with or without a leading - '?') and not a full url. - A azure.storage.file.datalake.DataLakePathClientBuilder is returned. +#### adx.control.models.FollowerDatabaseListResult.FollowerDatabaseListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.FreeFormObject -#### azure.storage.file.datalake.DataLakeDirectoryClient +Superclass: dynamicprops -```notalanguage - DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake - This client is instantiated through DataLakePathClientBuilder +```text +Class methods +``` + +#### adx.control.models.FreeFormObject.FreeFormObject +```text +Class methods ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.delete* +### adx.control.models.Identity -```notalanguage - DELETE DataLakeDirectoryClient destructor - in MATLAB delete is a reserved - method name for the class destructor. This method does not delete - files on Azure. To delete the Azure files use the deleteDirectory - method in MATLAB. +Superclass: adx.control.JSONMapper +```text +Identity Identity for the resource. + + Identity Properties: + principalId - The principal ID of resource identity. - type: string + tenantId - The tenant ID of resource. - type: string + type - The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove all identities. - type: string + userAssignedIdentities - The list of user identities associated with the Kusto cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''. - type: adx.control.JSONMapperMap ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.createFile* - -```notalanguage - CREATEFILE Creates a new file within a directory - By default, this method will not overwrite an existing file. - To enable overwrite set an overwrite argument to true. - A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +#### adx.control.models.Identity.Identity +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory* +### adx.control.models.IdentityTypeEnum -```notalanguage - DELETEDIRECTORY Deletes the directory - this is the equivalent of the "delete" - method in the Azure Java API but because "delete" is a reserved - method name in MATLAB, the method is named deleteDirectory. - - Example: - client.deleteDirectory() +Superclass: adx.control.JSONEnum +```text +IdentityTypeEnum No description provided ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile* +```text +Enumeration values: + None + SystemAssigned + UserAssigned + SystemAssigned_UserAssigned -```notalanguage - DELETEFILE Deletes the file - this is the equivalent of the "delete" - method in the Azure Java API but because "delete" is a reserved - method name in MATLAB, the method is named deleteFile. - - Example: - client.deleteFile('myfile.txt') +``` + +#### adx.control.models.IdentityTypeEnum.IdentityTypeEnum +```text +IdentityTypeEnum No description provided ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory* +### adx.control.models.Identity_userAssignedIdentities_value -```notalanguage - DELETESUBDIRECTORY Deletes the specified sub-directory in the directory - If the sub-directory doesn't exist or is not empty the operation fails. - subdirectoryName is provided as a character vector or scalar string. +Superclass: adx.control.JSONMapper +```text +Identity_userAssignedIdentities_value No description provided + + Identity_userAssignedIdentities_value Properties: + principalId - The principal id of user assigned identity. - type: string + clientId - The client id of user assigned identity. - type: string ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.exists* - -```notalanguage - EXISTS Gets if the path this client represents exists in Azure - This does not guarantee that the path type (file/directory) matches expectations. - E.g. a DataLakeFileClient representing a path to a datalake directory will - return true, and vice versa. - A logical is returned. +#### adx.control.models.Identity_userAssignedIdentities_value.Identity_userAssignedIdentities_value +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath* +### adx.control.models.IotHubConnectionProperties -```notalanguage - GETDIRECTORYPATH Gets the path of this file, not including the name of the resource itself - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +IotHubConnectionProperties Class representing the Kusto Iot hub connection properties. + + IotHubConnectionProperties Properties: + iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + consumerGroup - The iot hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: IotHubDataFormat + eventSystemProperties - System properties of the iot hub - type: array of string + sharedAccessPolicyName - The name of the share access policy - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + provisioningState - type: ProvisioningState ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl* - -```notalanguage - GETDIRECTORYURL Gets the URL of the directory represented by this client - A matlab.net.URI is returned. +#### adx.control.models.IotHubConnectionProperties.IotHubConnectionProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient* +### adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum -```notalanguage - GETFILECLIENT Create a DataLakeFileClient concatenating fileName to the DataLakeDirectoryClient +Superclass: adx.control.JSONEnum +```text +IotHubConnectionPropertiesDatabaseRoutingEnum No description provided ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.listPaths* - -```notalanguage - LISTPATHS Returns a list of files/directories in this account - Paths are returned as an array of - azure.storage.file.datalake.models.PathItem objects. - If there are no keys an empty array is returned. +```text +Enumeration values: + Single + Multi ``` -*azure.storage.file.datalake.DataLakeDirectoryClient.rename* - -```notalanguage - RENAME Moves the directory to another location within the file system - Arguments must be scalar strings or character vectors. - - destinationFileSystem is the file system of the destination within the account. - Use an empty array [] to use the current file system. - - destinationPath Relative path from the file system to rename the directory to. - This excludes the file system name, e.g. to move a directory with: - fileSystem = "myfilesystem", path = "mydir/mysubdir" - to another path in myfilesystem e.g.: newdir then set the destinationPath to "newdir" - - A DataLakeDirectoryClient used to interact with the newly created directory is returned. +#### adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum.IotHubConnectionPropertiesDatabaseRoutingEnum +```text +IotHubConnectionPropertiesDatabaseRoutingEnum No description provided ``` +### adx.control.models.IotHubConnectionProperties_1 -#### azure.storage.file.datalake.models.PathItem - -```notalanguage - Copyright 2022 The MathWorks, Inc. +Superclass: adx.control.JSONMapper +```text +IotHubConnectionProperties_1 Class representing the Kusto Iot hub connection properties. + + IotHubConnectionProperties_1 Properties: + iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + consumerGroup - The iot hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: IotHubDataFormat + eventSystemProperties - System properties of the iot hub - type: array of string + sharedAccessPolicyName - The name of the share access policy - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + provisioningState - type: ProvisioningState ``` -*azure.storage.file.datalake.models.PathItem.getName* - -```notalanguage - GETNAME Get the name property - A character vector is returned. +#### adx.control.models.IotHubConnectionProperties_1.IotHubConnectionProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.models.PathItem.isDirectory* +### adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum -```notalanguage - ISDIRECTORY Get the isDirectory property - A logical is returned. +Superclass: adx.control.JSONEnum +```text +IotHubConnectionProperties_1DatabaseRoutingEnum No description provided ``` +```text +Enumeration values: + Single + Multi -#### azure.storage.file.datalake.models.PathProperties +``` -```notalanguage - Copyright 2022 The MathWorks, Inc. +#### adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum.IotHubConnectionProperties_1DatabaseRoutingEnum +```text +IotHubConnectionProperties_1DatabaseRoutingEnum No description provided ``` +### adx.control.models.IotHubDataConnection -#### azure.storage.file.datalake.sas.FileSystemSasPermission - -```notalanguage - FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. +Superclass: adx.control.JSONMapper +```text +IotHubDataConnection Class representing an iot hub data connection. + + IotHubDataConnection Properties: + xproperties - type: IotHubConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.parse* - -```notalanguage - PARSE Creates a FileSystemSasPermission from the specified permissions string - A azure.storage.file.datalake.sas.FileSystemPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. +#### adx.control.models.IotHubDataConnection.IotHubDataConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission* +### adx.control.models.IotHubDataFormat -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +IotHubDataFormat The data format of the message. Optionally the data format can be added to each message. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission* - -```notalanguage - HASCREATEPERMISSION Returns the create permission status - The result is returned as a logical +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission* - -```notalanguage - HASDELETEPERMISSION Returns the delete permission status - The result is returned as a logical. +#### adx.control.models.IotHubDataFormat.IotHubDataFormat +```text +IotHubDataFormat The data format of the message. Optionally the data format can be added to each message. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission* +### adx.control.models.KeyVaultProperties -```notalanguage - HASEXECUTEPERMISSION Returns the execute permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +KeyVaultProperties Properties of the key vault. + + KeyVaultProperties Properties: + keyName - The name of the key vault key. - type: string + keyVersion - The version of the key vault key. - type: string + keyVaultUri - The Uri of the key vault. - type: string + userIdentity - The user assigned identity (ARM resource id) that has access to the key. - type: string ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission* - -```notalanguage - HASLISTPERMISSION Returns the list permission status - The result is returned as a logical. +#### adx.control.models.KeyVaultProperties.KeyVaultProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission* +### adx.control.models.LanguageExtension -```notalanguage - HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +LanguageExtension The language extension object. + + LanguageExtension Properties: + languageExtensionName - type: LanguageExtensionName + languageExtensionImageName - type: LanguageExtensionImageName ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission* - -```notalanguage - HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status - The result is returned as a logical. +#### adx.control.models.LanguageExtension.LanguageExtension +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission* +### adx.control.models.LanguageExtensionImageName -```notalanguage - HASMOVEPERMISSION Returns the move permission status - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +LanguageExtensionImageName Language extension image name. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission* - -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +```text +Enumeration values: + R + Python3_6_5 + Python3_10_8 ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission* - -```notalanguage - HASWRITEPERMISSION Returns the write permission status - The result is returned as a logical. +#### adx.control.models.LanguageExtensionImageName.LanguageExtensionImageName +```text +LanguageExtensionImageName Language extension image name. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission* +### adx.control.models.LanguageExtensionName -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +Superclass: adx.control.JSONEnum +```text +LanguageExtensionName Language extension that can run within KQL query. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission* - -```notalanguage - SETCREATEPERMISSION Sets the create permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +```text +Enumeration values: + PYTHON + R ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission* - -```notalanguage - SETDELETEPERMISSION Sets the delete permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +#### adx.control.models.LanguageExtensionName.LanguageExtensionName +```text +LanguageExtensionName Language extension that can run within KQL query. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission* +### adx.control.models.LanguageExtension_1 -```notalanguage - SETEXECUTEPERMISSION Sets the execute permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +LanguageExtension_1 The language extension object. + + LanguageExtension_1 Properties: + languageExtensionName - type: LanguageExtensionName + languageExtensionImageName - type: LanguageExtensionImageName ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission* - -```notalanguage - SETADDPERMISSION Sets the list permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +#### adx.control.models.LanguageExtension_1.LanguageExtension_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission* +### adx.control.models.LanguageExtensionsList -```notalanguage - SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +LanguageExtensionsList The list of language extension objects. + + LanguageExtensionsList Properties: + value - The list of language extensions. - type: array of LanguageExtension_1 ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission* - -```notalanguage - SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +#### adx.control.models.LanguageExtensionsList.LanguageExtensionsList +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission* +### adx.control.models.ListResourceSkusResult -```notalanguage - SETMOVEPERMISSION Sets the move permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +ListResourceSkusResult List of available SKUs for a Kusto Cluster. + + ListResourceSkusResult Properties: + value - The collection of available SKUs for an existing resource. - type: array of AzureResourceSku_1 ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission* - -```notalanguage - SETCREATEPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +#### adx.control.models.ListResourceSkusResult.ListResourceSkusResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission* +### adx.control.models.ManagedPrivateEndpoint -```notalanguage - SETWRITEPERMISSION Sets the write permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +ManagedPrivateEndpoint Class representing a managed private endpoint. + + ManagedPrivateEndpoint Properties: + xproperties - type: ManagedPrivateEndpointProperties_1 + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.file.datalake.sas.FileSystemSasPermission.toString* - -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +#### adx.control.models.ManagedPrivateEndpoint.ManagedPrivateEndpoint +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.ManagedPrivateEndpointListResult -#### azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues - -```notalanguage - DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage - When the values are set, use the generateSas method on the desired service - client to obtain a representation of the SAS which can then be applied to a - new client using the .sasToken(String) method on the desired client builder. - - Example - dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions); - - Argument types: - expiryTime: datetime ideally with defined TimeZone to avoid any - confusion, if TimeZone is not set, 'local' is assumed - permissions: azure.storage.file.datalake.sas.PathSasPermission or - FileSystemSasPermission - Or - - dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier); - - Argument types: - identifier: Creates an object with the specified identifier. - NOTE: Identifier can not be used for a UserDelegationKey SAS. - Type character vector or scalar string. +Superclass: adx.control.JSONMapper +```text +ManagedPrivateEndpointListResult The list managed private endpoints operation response. + + ManagedPrivateEndpointListResult Properties: + value - The list of managed private endpoints. - type: array of ManagedPrivateEndpoint ``` +#### adx.control.models.ManagedPrivateEndpointListResult.ManagedPrivateEndpointListResult -#### azure.storage.file.datalake.sas.PathSasPermission - -```notalanguage - PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.parse* +### adx.control.models.ManagedPrivateEndpointProperties -```notalanguage - PARSE Creates a PathSasPermission from the specified permissions string - A azure.storage.file.datalake.sas.PathSasPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. +Superclass: adx.control.JSONMapper +```text +ManagedPrivateEndpointProperties A class representing the properties of a managed private endpoint object. + + ManagedPrivateEndpointProperties Properties: + privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + groupId - The groupId in which the managed private endpoint is created. - type: string + requestMessage - The user request message. - type: string + provisioningState - type: ProvisioningState ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission* - -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +#### adx.control.models.ManagedPrivateEndpointProperties.ManagedPrivateEndpointProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission* +### adx.control.models.ManagedPrivateEndpointProperties_1 -```notalanguage - HASCREATEPERMISSION Returns the create permission status - The result is returned as a logical +Superclass: adx.control.JSONMapper +```text +ManagedPrivateEndpointProperties_1 A class representing the properties of a managed private endpoint object. + + ManagedPrivateEndpointProperties_1 Properties: + privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + groupId - The groupId in which the managed private endpoint is created. - type: string + requestMessage - The user request message. - type: string + provisioningState - type: ProvisioningState ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission* - -```notalanguage - HASDELETEPERMISSION Returns the delete permission status - The result is returned as a logical. +#### adx.control.models.ManagedPrivateEndpointProperties_1.ManagedPrivateEndpointProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission* +### adx.control.models.ManagedPrivateEndpointsCheckNameRequest -```notalanguage - HASEXECUTEPERMISSION Returns the execute permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +ManagedPrivateEndpointsCheckNameRequest The result returned from a managedPrivateEndpoints check name availability request. + + ManagedPrivateEndpointsCheckNameRequest Properties: + name - Managed private endpoint resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/managedPrivateEndpoints. - type: string ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasListPermission* - -```notalanguage - HASLISTPERMISSION Returns the list permission status - The result is returned as a logical. +#### adx.control.models.ManagedPrivateEndpointsCheckNameRequest.ManagedPrivateEndpointsCheckNameRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission* +### adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum -```notalanguage - HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status - The result is returned as a logical. +Superclass: adx.control.JSONEnum +```text +ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission* - -```notalanguage - HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status - The result is returned as a logical. +```text +Enumeration values: + Microsoft_Kusto_clusters_managedPrivateEndpoints ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission* - -```notalanguage - HASMOVEPERMISSION Returns the move permission status - The result is returned as a logical. +#### adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum.ManagedPrivateEndpointsCheckNameRequestTypeEnum +```text +ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission* +### adx.control.models.MigrationClusterProperties -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +MigrationClusterProperties Represents a properties of a cluster that is part of a migration. + + MigrationClusterProperties Properties: + id - The resource ID of the cluster. - type: string + uri - The public URL of the cluster. - type: string + dataIngestionUri - The public data ingestion URL of the cluster. - type: string + role - The role of the cluster in the migration process. - type: string ``` -*azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission* - -```notalanguage - HASWRITEPERMISSION Returns the write permission status - The result is returned as a logical. +#### adx.control.models.MigrationClusterProperties.MigrationClusterProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.setAddPermission* +### adx.control.models.MigrationClusterPropertiesRoleEnum -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +Superclass: adx.control.JSONEnum +```text +MigrationClusterPropertiesRoleEnum No description provided ``` -*azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission* - -```notalanguage - SETCREATEPERMISSION Sets the create permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +```text +Enumeration values: + Source + Destination ``` -*azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission* - -```notalanguage - SETDELETEPERMISSION Sets the delete permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +#### adx.control.models.MigrationClusterPropertiesRoleEnum.MigrationClusterPropertiesRoleEnum +```text +MigrationClusterPropertiesRoleEnum No description provided ``` -*azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission* +### adx.control.models.Operation -```notalanguage - SETEXECUTEPERMISSION Sets the execute permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +Operation No description provided + + Operation Properties: + name - This is of the format {provider}/{resource}/{operation}. - type: string + display - type: The_object_that_describes_the_operation_ + origin - type: string + xproperties - type: object ``` -*azure.storage.file.datalake.sas.PathSasPermission.setListPermission* - -```notalanguage - SETADDPERMISSION Sets the list permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +#### adx.control.models.Operation.Operation +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission* +### adx.control.models.OperationListResult -```notalanguage - SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +OperationListResult No description provided + + OperationListResult Properties: + value - type: array of Operation + nextLink - type: string ``` -*azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission* - -```notalanguage - SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +#### adx.control.models.OperationListResult.OperationListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.setMovePermission* +### adx.control.models.OperationResult -```notalanguage - SETMOVEPERMISSION Sets the move permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +OperationResult Operation Result Entity. + + OperationResult Properties: + id - ID of the resource. - type: string + name - Name of the resource. - type: string + status - type: Status + startTime - The operation start time - type: datetime + endTime - The operation end time - type: datetime + percentComplete - Percentage completed. - type: double + xproperties - type: OperationResultProperties + error - type: OperationResultErrorProperties ``` -*azure.storage.file.datalake.sas.PathSasPermission.setReadPermission* - -```notalanguage - SETREADPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +#### adx.control.models.OperationResult.OperationResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.file.datalake.sas.PathSasPermission.setWritePermission* +### adx.control.models.OperationResultErrorProperties -```notalanguage - SETWRITEPERMISSION Sets the write permission status - The permission argument should be of type logical. - A azure.storage.file.datalake.sas.PathSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +OperationResultErrorProperties Operation result error properties + + OperationResultErrorProperties Properties: + code - The code of the error. - type: string + message - The error message. - type: string ``` -*azure.storage.file.datalake.sas.PathSasPermission.toString* - -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +#### adx.control.models.OperationResultErrorProperties.OperationResultErrorProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.OperationResultProperties -#### azure.storage.blob.BlobClient - -```notalanguage - BLOBCLIENT Client performs generic blob operations +Superclass: adx.control.JSONMapper +```text +OperationResultProperties Operation result properties + + OperationResultProperties Properties: + operationKind - The kind of the operation. - type: string + provisioningState - type: ProvisioningState + operationState - The state of the operation. - type: string ``` -*azure.storage.blob.BlobClient.delete* - -```notalanguage - DELETE BlobClient destructor - in MATLAB delete is a reserved - method name for the class destructor. This method does not delete - Blobs on Azure. To delete the Azure Blob use the deleteBlob - method in MATLAB. +#### adx.control.models.OperationResultProperties.OperationResultProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClient.copyFromUrl* +### adx.control.models.OptimizedAutoscale -```notalanguage - COPYFROMURL Copies the data at the source URL to a blob - The call waits for the copy to complete before returning a response. - A copyId is returned as a character vector it can apply for certain long - running operations. - - If a lease is active on the blob, parameter 'leaseId' and the - actual lease id as value can be provided. +Superclass: adx.control.JSONMapper +```text +OptimizedAutoscale A class that contains the optimized auto scale definition. + + OptimizedAutoscale Properties: + version - The version of the template defined, for instance 1. - type: int32 + isEnabled - A boolean value that indicate if the optimized autoscale feature is enabled or not. - type: logical + minimum - Minimum allowed instances count. - type: int32 + maximum - Maximum allowed instances count. - type: int32 ``` -*azure.storage.blob.BlobClient.deleteBlob* - -```notalanguage - DELETEBLOB Deletes the blob - this is the equivalent of the "delete" - method in the Azure Java API but because "delete" is a reserved - method name in MATLAB, the method is named deleteBlob. - - If a lease is active on the blob, parameter 'leaseId' and the - actual lease id as value can be provided. - - Example: - client.deleteBlob('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +#### adx.control.models.OptimizedAutoscale.OptimizedAutoscale +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClient.downloadToFile* +### adx.control.models.OutboundNetworkDependenciesEndpoint -```notalanguage - DOWNLOADTOFILE Downloads the entire blob into a file specified by filePath - To overwrite an existing file use a parameter 'overwrite' and a logical true. - By default a file is not overwritten. - - Example: - blobClient.downloadToFile('/mydir/myfile.txt', 'overwrite', true); +Superclass: adx.control.JSONMapper +```text +OutboundNetworkDependenciesEndpoint Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. + + OutboundNetworkDependenciesEndpoint Properties: + xproperties - type: OutboundNetworkDependenciesEndpointProperties + etag - A unique read-only string that changes whenever the resource is updated. - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobClient.exists* - -```notalanguage - EXISTS Gets if the blob this client represents exists in Azure - A logical is returned if the Container exists indicating if the blob - exists or not. Otherwise an exception is thrown, for example if the - container does not exist. Consider using a container client to check for - the existance of the container first. +#### adx.control.models.OutboundNetworkDependenciesEndpoint.OutboundNetworkDependenciesEndpoint +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClient.generateSas* +### adx.control.models.OutboundNetworkDependenciesEndpointListResult -```notalanguage - GENERATESAS Generates a SAS for the blob - The client must be authenticated via StorageSharedKeyCredential - The SAS is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +OutboundNetworkDependenciesEndpointListResult Collection of Outbound Environment Endpoints + + OutboundNetworkDependenciesEndpointListResult Properties: + value - Collection of resources. - type: array of OutboundNetworkDependenciesEndpoint + nextLink - Link to next page of resources. - type: string ``` -*azure.storage.blob.BlobClient.generateUserDelegationSas* - -```notalanguage - GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the - blob using the specified BlobServiceSasSignatureValues and - UserDelegationKey. The UserDelegationKey can be obtained through the - getUserDelegationKey method of a BlobServiceClient. - - The SAS is returned as a character vector. +#### adx.control.models.OutboundNetworkDependenciesEndpointListResult.OutboundNetworkDependenciesEndpointListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClient.getAccountName* +### adx.control.models.OutboundNetworkDependenciesEndpointProperties -```notalanguage - GETACCOUNTNAME Get associated account name - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +OutboundNetworkDependenciesEndpointProperties Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. + + OutboundNetworkDependenciesEndpointProperties Properties: + category - The type of service accessed by the Kusto Service Environment, e.g., Azure Storage, Azure SQL Database, and Azure Active Directory. - type: string + endpoints - The endpoints that the Kusto Service Environment reaches the service at. - type: array of EndpointDependency + provisioningState - type: ProvisioningState ``` -*azure.storage.blob.BlobClient.getBlobUrl* - -```notalanguage - GETBLOBURL Gets the URL of the blob represented by this client - The URL is returned as a character vector. +#### adx.control.models.OutboundNetworkDependenciesEndpointProperties.OutboundNetworkDependenciesEndpointProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClient.getContainerClient* +### adx.control.models.PrivateEndpointConnection -```notalanguage - GETCONTAINERCLIENT Gets a client pointing to the parent container. +Superclass: adx.control.JSONMapper +```text +PrivateEndpointConnection A private endpoint connection + + PrivateEndpointConnection Properties: + xproperties - type: PrivateEndpointConnectionProperties + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobClient.uploadFromFile* - -```notalanguage - UPLOADFROMFILE Creates a or updates a block blob To overwrite an - existing blob use a parameter 'overwrite' and a logical true. By - default a blob is not overwritten. - - If a lease is active on the blob, parameter 'leaseId' and the - actual lease id as value can be provided. - - Example: - blobClient.uploadFromFile('/mydir/myfile.txt',... - 'overwrite', true,... - 'leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797'); +#### adx.control.models.PrivateEndpointConnection.PrivateEndpointConnection +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.PrivateEndpointConnectionListResult + +Superclass: adx.control.JSONMapper -#### azure.storage.blob.BlobContainerClient +```text +PrivateEndpointConnectionListResult A list of private endpoint connections + + PrivateEndpointConnectionListResult Properties: + value - Array of private endpoint connections - type: array of PrivateEndpointConnection +``` -```notalanguage - BLOBCONTAINERCLIENT Client to a container +#### adx.control.models.PrivateEndpointConnectionListResult.PrivateEndpointConnectionListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.delete* +### adx.control.models.PrivateEndpointConnectionProperties -```notalanguage - DELETE BlobContainerClient destructor - in MATLAB delete is a - reserved method name for the class destructor. This method - does not delete Blob Containers on Azure. To delete the Azure - Blob Container use the deleteContainer method in MATLAB. +Superclass: adx.control.JSONMapper +```text +PrivateEndpointConnectionProperties Properties of a private endpoint connection. + + PrivateEndpointConnectionProperties Properties: + privateEndpoint - type: PrivateEndpointProperty + privateLinkServiceConnectionState - type: PrivateLinkServiceConnectionStateProperty + groupId - Group id of the private endpoint. - type: string + provisioningState - Provisioning state of the private endpoint. - type: string ``` -*azure.storage.blob.BlobContainerClient.create* - -```notalanguage - CREATE Creates a new container within a storage account +#### adx.control.models.PrivateEndpointConnectionProperties.PrivateEndpointConnectionProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.deleteContainer* +### adx.control.models.PrivateEndpointProperty -```notalanguage - DELETECONTAINER Deletes the container - this is the equivalent of the - "delete" method in the Azure Java API but because "delete" is a - reserved method name in MATLAB, the method is named DELETECONTAINER. - - If a lease is active on the blob, parameter 'leaseId' and the - actual lease id as value can be provided. - - Example: - client.deleteContainer('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +Superclass: adx.control.JSONMapper +```text +PrivateEndpointProperty Private endpoint which the connection belongs to. + + PrivateEndpointProperty Properties: + id - Resource id of the private endpoint. - type: string ``` -*azure.storage.blob.BlobContainerClient.exists* - -```notalanguage - EXISTS Tests if the container this client represents exists in Azure - A logical is returned. +#### adx.control.models.PrivateEndpointProperty.PrivateEndpointProperty +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.generateUserDelegationSas* +### adx.control.models.PrivateLinkResource -```notalanguage - GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the - container using the specified BlobServiceSasSignatureValues and - UserDelegationKey. The UserDelegationKey can be obtained through the - getUserDelegationKey method of a BlobServiceClient. - - The SAS is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +PrivateLinkResource A private link resource + + PrivateLinkResource Properties: + xproperties - type: PrivateLinkResourceProperties + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobContainerClient.getAccountName* - -```notalanguage - GETACCOUNTNAME Get associated account name - A character vector is returned. +#### adx.control.models.PrivateLinkResource.PrivateLinkResource +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.getAccountUrl* +### adx.control.models.PrivateLinkResourceListResult -```notalanguage - GETACCOUNTURL Get associated account URL - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +PrivateLinkResourceListResult A list of private link resources + + PrivateLinkResourceListResult Properties: + value - Array of private link resources - type: array of PrivateLinkResource ``` -*azure.storage.blob.BlobContainerClient.getBlobClient* - -```notalanguage - GETBLOBCLIENT Initializes a new BlobClient object - blobName should be a scalar string or character vector. - A BlobClient is returned. +#### adx.control.models.PrivateLinkResourceListResult.PrivateLinkResourceListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.getBlobContainerName* +### adx.control.models.PrivateLinkResourceProperties -```notalanguage - GETCONTAINERNAME Get the container name - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +PrivateLinkResourceProperties Properties of a private link resource. + + PrivateLinkResourceProperties Properties: + groupId - The private link resource group id. - type: string + requiredMembers - The private link resource required member names. - type: array of string + requiredZoneNames - The private link resource required zone names. - type: array of string ``` -*azure.storage.blob.BlobContainerClient.getBlobContainerUrl* - -```notalanguage - GETBLOBCONTAINERURL Get associated container URL - A character vector is returned. +#### adx.control.models.PrivateLinkResourceProperties.PrivateLinkResourceProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.getServiceClient* +### adx.control.models.PrivateLinkServiceConnectionStateProperty -```notalanguage - GETSERVICECLIENT Get a client pointing to the account. +Superclass: adx.control.JSONMapper +```text +PrivateLinkServiceConnectionStateProperty Connection State of the Private Endpoint Connection. + + PrivateLinkServiceConnectionStateProperty Properties: + status - The private link service connection status. - type: string + description - The private link service connection description. - type: string + actionsRequired - Any action that is required beyond basic workflow (approve/ reject/ disconnect) - type: string ``` -*azure.storage.blob.BlobContainerClient.listBlobs* - -```notalanguage - LISTBLOBS Returns a list of blobs in this container - Folder structures are flattened. - An array of BlobItems is returned. +#### adx.control.models.PrivateLinkServiceConnectionStateProperty.PrivateLinkServiceConnectionStateProperty +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClient.listBlobsByHierarchy* +### adx.control.models.ProvisioningState -```notalanguage - LISTBLOBSBYHIERARCHY Returns the blobs and directories (prefixes) under the given directory (prefix). - Directories will have BlobItem.isPrefix() set to true. - Blob names are returned in lexicographic order. - An array of BlobItems is returned. +Superclass: adx.control.JSONEnum +```text +ProvisioningState The provisioned state of the resource. ``` +```text +Enumeration values: + Running + Creating + Deleting + Succeeded + Failed + Moving + Canceled -#### azure.storage.blob.BlobContainerClientBuilder +``` -```notalanguage - BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients +#### adx.control.models.ProvisioningState.ProvisioningState +```text +ProvisioningState The provisioned state of the resource. ``` -*azure.storage.blob.BlobContainerClientBuilder.buildClient* +### adx.control.models.ProxyResource -```notalanguage - BUILDCLIENT Creates a BlobContainerClient based on options set in the builder - A built BlobContainerClient object is returned. +Superclass: adx.control.JSONMapper +```text +ProxyResource The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location + + ProxyResource Properties: + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobContainerClientBuilder.connectionString* - -```notalanguage - CONNECTIONSTRING Sets the connection string to connect to the service - connectionString should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ProxyResource.ProxyResource +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClientBuilder.containerName* +### adx.control.models.ReadOnlyFollowingDatabase -```notalanguage - CONTAINERNAME Sets the name of the container - containerName should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadOnlyFollowingDatabase Class representing a read only following database. + + ReadOnlyFollowingDatabase Properties: + xproperties - type: ReadOnlyFollowingDatabaseProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobContainerClientBuilder.credential* - -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. - An updated builder object is returned. +#### adx.control.models.ReadOnlyFollowingDatabase.ReadOnlyFollowingDatabase +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobContainerClientBuilder.endpoint* +### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 -```notalanguage - ENDPOINT Sets the blob container endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONEnum +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided ``` -*azure.storage.blob.BlobContainerClientBuilder.httpClient* +```text +Enumeration values: + Union + Replace + None -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +``` +#### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 + +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided ``` -*azure.storage.blob.BlobContainerClientBuilder.sasToken* +### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 -```notalanguage - sasToken Sets the SAS token used to authorize requests - sasToken should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONEnum +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided ``` +```text +Enumeration values: + Union + Replace + None -#### azure.storage.blob.BlobClientBuilder +``` -```notalanguage - BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients +#### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided ``` -*azure.storage.blob.BlobClientBuilder.blobName* +### adx.control.models.ReadOnlyFollowingDatabaseProperties -```notalanguage - BLOBNAME Sets the name of the blob - blobName should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadOnlyFollowingDatabaseProperties Class representing the Kusto database properties. + + ReadOnlyFollowingDatabaseProperties Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + leaderClusterResourceId - The name of the leader cluster - type: string + attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + principalsModificationKind - The principals modification kind of the database - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + databaseShareOrigin - type: DatabaseShareOrigin + suspensionDetails - type: SuspensionDetails ``` -*azure.storage.blob.BlobClientBuilder.buildClient* - -```notalanguage - BUILDCLIENT Creates a BlobClient based on options set in the builder - A built BlobClient object is returned. +#### adx.control.models.ReadOnlyFollowingDatabaseProperties.ReadOnlyFollowingDatabaseProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClientBuilder.connectionString* +### adx.control.models.ReadOnlyFollowingDatabaseProperties_1 -```notalanguage - CONNECTIONSTRING Sets the connection string to connect to the service - connectionString should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadOnlyFollowingDatabaseProperties_1 Class representing the Kusto database properties. + + ReadOnlyFollowingDatabaseProperties_1 Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + leaderClusterResourceId - The name of the leader cluster - type: string + attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + principalsModificationKind - The principals modification kind of the database - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + databaseShareOrigin - type: DatabaseShareOrigin + suspensionDetails - type: SuspensionDetails ``` -*azure.storage.blob.BlobClientBuilder.containerName* - -```notalanguage - CONTAINERNAME Sets the name of the container that contains the blob - containerName should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ReadOnlyFollowingDatabaseProperties_1.ReadOnlyFollowingDatabaseProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClientBuilder.credential* +### adx.control.models.ReadWriteDatabase -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential - or azure.core.credential.TokenCredential. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadWriteDatabase Class representing a read write database. + + ReadWriteDatabase Properties: + xproperties - type: ReadWriteDatabaseProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobClientBuilder.endpoint* - -```notalanguage - ENDPOINT Sets the client endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ReadWriteDatabase.ReadWriteDatabase +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClientBuilder.httpClient* +### adx.control.models.ReadWriteDatabaseProperties -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadWriteDatabaseProperties Class representing the Kusto database properties. + + ReadWriteDatabaseProperties Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + isFollowed - Indicates whether the database is followed. - type: logical + keyVaultProperties - type: KeyVaultProperties + suspensionDetails - type: SuspensionDetails ``` -*azure.storage.blob.BlobClientBuilder.sasToken* - -```notalanguage - sasToken Sets the SAS token used to authorize requests - sasToken should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ReadWriteDatabaseProperties.ReadWriteDatabaseProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobClientBuilder.setAnonymousAccess* +### adx.control.models.ReadWriteDatabaseProperties_1 -```notalanguage - SETANONYMOUSACCESS Clears the credential used to authorize the request - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ReadWriteDatabaseProperties_1 Class representing the Kusto database properties. + + ReadWriteDatabaseProperties_1 Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + isFollowed - Indicates whether the database is followed. - type: logical + keyVaultProperties - type: KeyVaultProperties + suspensionDetails - type: SuspensionDetails ``` +#### adx.control.models.ReadWriteDatabaseProperties_1.ReadWriteDatabaseProperties_1 -#### azure.storage.blob.BlobServiceClient - -```notalanguage - BLOBSERVICECLIENT - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClient.createBlobContainer* +### adx.control.models.Resource -```notalanguage - CREATEBLOBCONTAINER Creates a new container within a storage account - If a container with the same name already exists, the operation fails. - The name of the container to create should be passed as a character vector or - scalar string. - If the container already exists an empty azure.storage.blob.BlobContainerClient - is returned otherwise a non empty azure.storage.blob.BlobContainerClient is - returned. - In verbose logging mode a message is logged. +Superclass: adx.control.JSONMapper +```text +Resource Common fields that are returned in the response for all Azure Resource Manager resources + + Resource Properties: + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobServiceClient.deleteBlobContainer* - -```notalanguage - DELETEBLOBCONTAINER Deletes the specified container in the storage account - The name of the container to create should be passed as a character vector or - scalar string. +#### adx.control.models.Resource.Resource +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClient.generateAccountSas* +### adx.control.models.ResourceSkuCapabilities -```notalanguage - GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account - The client must be authenticated via StorageSharedKeyCredential - The SAS is returned as a character vector. +Superclass: adx.control.JSONMapper +```text +ResourceSkuCapabilities Describes The SKU capabilities object. + + ResourceSkuCapabilities Properties: + name - An invariant to describe the feature. - type: string + value - An invariant if the feature is measured by quantity. - type: string ``` -*azure.storage.blob.BlobServiceClient.getAccountInfo* - -```notalanguage - GETACCOUNTINFO Returns the sku name and account kind for the account - A StorageAccountInfo object is returned. +#### adx.control.models.ResourceSkuCapabilities.ResourceSkuCapabilities +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClient.getAccountName* +### adx.control.models.ResourceSkuZoneDetails -```notalanguage - GETACCOUNTNAME Get associated account name - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +ResourceSkuZoneDetails Describes The zonal capabilities of a SKU. + + ResourceSkuZoneDetails Properties: + name - The set of zones that the SKU is available in with the specified capabilities. - type: array of string + capabilities - A list of capabilities that are available for the SKU in the specified list of zones. - type: array of ResourceSkuCapabilities ``` -*azure.storage.blob.BlobServiceClient.getAccountUrl* - -```notalanguage - GETACCOUNTURL Get associated account URL - A character vector is returned. +#### adx.control.models.ResourceSkuZoneDetails.ResourceSkuZoneDetails +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClient.getUserDelegationKey* +### adx.control.models.Script -```notalanguage - GETUSERDELEGATIONKEY Gets a user delegation key for use with this - account's blob storage. - - Note: This method call is only valid when using TokenCredential. I.e. not - when working with ConnectionString or StorageSharedKey authentication - approaches. - - The function takes two datetime objects as input, the start and expiry - time of the key's validity. - - Returns a UserDelegationKey object. - - Example: - - key = sc.getUserDelegationKey(datetime('now'),datetime('now')+hours(1)) +Superclass: adx.control.JSONMapper +```text +Script Class representing a database script. + + Script Properties: + xproperties - type: ScriptProperties_1 + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.BlobServiceClient.listBlobContainers* - -```notalanguage - LISTBLOBCONTAINERS +#### adx.control.models.Script.Script +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClient.setAnonymousAccess* +### adx.control.models.ScriptCheckNameRequest -```notalanguage - SETANONYMOUSACCESS Clears the credential used to authorize the request - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ScriptCheckNameRequest A script name availability request. + + ScriptCheckNameRequest Properties: + name - Script name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/scripts. - type: string ``` +#### adx.control.models.ScriptCheckNameRequest.ScriptCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -#### azure.storage.blob.BlobServiceClientBuilder +### adx.control.models.ScriptCheckNameRequestTypeEnum -```notalanguage - BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients +Superclass: adx.control.JSONEnum +```text +ScriptCheckNameRequestTypeEnum No description provided ``` -*azure.storage.blob.BlobServiceClientBuilder.buildClient* +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_scripts -```notalanguage - BUILDCLIENT Creates a BlobServiceClient based on options set in the builder - A built BlobServiceClient object is returned. +``` + +#### adx.control.models.ScriptCheckNameRequestTypeEnum.ScriptCheckNameRequestTypeEnum +```text +ScriptCheckNameRequestTypeEnum No description provided ``` -*azure.storage.blob.BlobServiceClientBuilder.connectionString* +### adx.control.models.ScriptListResult -```notalanguage - CONNECTIONSTRING Sets the connection string to connect to the service - connectionString should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ScriptListResult The list Kusto database script operation response. + + ScriptListResult Properties: + value - The list of Kusto scripts. - type: array of Script ``` -*azure.storage.blob.BlobServiceClientBuilder.credential* - -```notalanguage - CREDENTIAL Sets the credential used to authorize requests - Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. - An updated builder object is returned. +#### adx.control.models.ScriptListResult.ScriptListResult +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClientBuilder.endpoint* +### adx.control.models.ScriptProperties -```notalanguage - ENDPOINT Sets the blob service endpoint - The endpoint is also parsed for additional information i.e. the SAS token - endpoint should be of type character vector or scalar string. - An updated builder object is returned. +Superclass: adx.control.JSONMapper +```text +ScriptProperties A class representing database script property. + + ScriptProperties Properties: + scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + provisioningState - type: ProvisioningState ``` -*azure.storage.blob.BlobServiceClientBuilder.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. - An updated builder object is returned. +#### adx.control.models.ScriptProperties.ScriptProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.BlobServiceClientBuilder.retryOptions* +### adx.control.models.ScriptProperties_1 -```notalanguage - RETRYOPTIONS Sets request retry options for all requests made through the client - retryOptions may be either a com.azure.storage.common.policy.RequestRetryOptions - or a azure.storage.common.policy.RequestRetryOptions object. - An updated azure.storage.blob.BlobServiceClientBuilder object is returned. +Superclass: adx.control.JSONMapper +```text +ScriptProperties_1 A class representing database script property. + + ScriptProperties_1 Properties: + scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + provisioningState - type: ProvisioningState ``` -*azure.storage.blob.BlobServiceClientBuilder.sasToken* - -```notalanguage - SASTOKEN Sets the SAS token used to authorize requests - sasToken should be of type character vector or scalar string. - An updated builder object is returned. +#### adx.control.models.ScriptProperties_1.ScriptProperties_1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.SkuDescription -#### azure.storage.blob.models.BlobContainerItem +Superclass: adx.control.JSONMapper -```notalanguage - BLOBCONTAINERITEM An Azure Storage container +```text +SkuDescription The Kusto SKU description of given resource type + + SkuDescription Properties: + resourceType - The resource type - type: string + name - The name of the SKU - type: string + tier - The tier of the SKU - type: string + locations - The set of locations that the SKU is available - type: array of string + locationInfo - Locations and zones - type: array of SkuLocationInfoItem + restrictions - The restrictions because of which SKU cannot be used - type: array of object +``` +#### adx.control.models.SkuDescription.SkuDescription + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.BlobContainerItem.getName* +### adx.control.models.SkuDescriptionList -```notalanguage - GETNAME Returns the container's name as a character vector +Superclass: adx.control.JSONMapper +```text +SkuDescriptionList The list of the EngagementFabric SKU descriptions + + SkuDescriptionList Properties: + value - SKU descriptions - type: array of SkuDescription ``` +#### adx.control.models.SkuDescriptionList.SkuDescriptionList -#### azure.storage.blob.models.UserDelegationKey +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - USERDELEGATIONKEY A user delegation key. +### adx.control.models.SkuLocationInfoItem -``` +Superclass: adx.control.JSONMapper -*azure.storage.blob.models.UserDelegationKey.getSignedStart* +```text +SkuLocationInfoItem The locations and zones info for SKU. + + SkuLocationInfoItem Properties: + location - The available location of the SKU. - type: string + zones - The available zone of the SKU. - type: array of string + zoneDetails - Gets details of capabilities available to a SKU in specific zones. - type: array of ResourceSkuZoneDetails +``` -```notalanguage - GETSIGNEDSTART Get the signedStart property: The date-time the - key is active. +#### adx.control.models.SkuLocationInfoItem.SkuLocationInfoItem +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.UserDelegationKey.getSignedExpiry* +### adx.control.models.Status -```notalanguage - GETSIGNEDEXPIRY Get the signedExpiry property: The date-time - the key expires. +Superclass: adx.control.JSONEnum +```text +Status The status of operation. ``` +```text +Enumeration values: + Succeeded + Canceled + Failed + Running -#### azure.storage.blob.models.ListBlobsOptions +``` -```notalanguage - LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient +#### adx.control.models.Status.Status +```text +Status The status of operation. ``` -*azure.storage.blob.models.ListBlobsOptions.getDetails* +### adx.control.models.SuspensionDetails -```notalanguage - GETDETAILS Returns a BlobListDetails object +Superclass: adx.control.JSONMapper +```text +SuspensionDetails The database suspension details. If the database is suspended, this object contains information related to the database''s suspension state. + + SuspensionDetails Properties: + suspensionStartDate - The starting date and time of the suspension state. - type: datetime ``` -*azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage* - -```notalanguage - GETDETAILS Returns the maximum number of blobs to return, including all BlobPrefix elements - A double is returned. - An empty [] is returned if not set. +#### adx.control.models.SuspensionDetails.SuspensionDetails +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.ListBlobsOptions.getPrefix* +### adx.control.models.TableLevelSharingProperties -```notalanguage - GETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +Superclass: adx.control.JSONMapper +```text +TableLevelSharingProperties Tables that will be included and excluded in the follower database + + TableLevelSharingProperties Properties: + tablesToInclude - List of tables to include in the follower database - type: array of string + tablesToExclude - List of tables to exclude from the follower database - type: array of string + externalTablesToInclude - List of external tables to include in the follower database - type: array of string + externalTablesToExclude - List of external tables to exclude from the follower database - type: array of string + materializedViewsToInclude - List of materialized views to include in the follower database - type: array of string + materializedViewsToExclude - List of materialized views to exclude from the follower database - type: array of string + functionsToInclude - List of functions to include in the follower database - type: array of string + functionsToExclude - List of functions to exclude from the follower database - type: array of string ``` -*azure.storage.blob.models.ListBlobsOptions.setDetails* - -```notalanguage - SETDETAILS Returns a ListBlobsOptions object +#### adx.control.models.TableLevelSharingProperties.TableLevelSharingProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage* +### adx.control.models.The_object_that_describes_the_operation_ -```notalanguage - SETDETAILS Returns a ListBlobsOptions object +Superclass: adx.control.JSONMapper +```text +The_object_that_describes_the_operation_ No description provided + + The_object_that_describes_the_operation_ Properties: + provider - type: string + operation - For example: read, write, delete. - type: string + resource - type: string + description - type: string ``` -*azure.storage.blob.models.ListBlobsOptions.setPrefix* - -```notalanguage - SETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +#### adx.control.models.The_object_that_describes_the_operation_.The_object_that_describes_the_operation_ +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` +### adx.control.models.TrackedResource -#### azure.storage.blob.models.BlobItemProperties - -```notalanguage - BlobItemProperties Properties of a blob +Superclass: adx.control.JSONMapper +```text +TrackedResource The resource model definition for an Azure Resource Manager tracked top level resource which has ''tags'' and a ''location'' + + TrackedResource Properties: + tags - Resource tags. - type: adx.control.JSONMapperMap + location - The geo-location where the resource lives - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string ``` -*azure.storage.blob.models.BlobItemProperties.getContentMd5* - -```notalanguage - GETCONTENTMD5 Get the getContentMd5 property - Return the base64 value shown in the Azure portal +#### adx.control.models.TrackedResource.TrackedResource +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.BlobItemProperties.getContentLength* +### adx.control.models.TrustedExternalTenant -```notalanguage - GETCONTENTLENGTH Get the contentType property +Superclass: adx.control.JSONMapper +```text +TrustedExternalTenant Represents a tenant ID that is trusted by the cluster. + + TrustedExternalTenant Properties: + value - GUID representing an external tenant. - type: string ``` -*azure.storage.blob.models.BlobItemProperties.getContentType* - -```notalanguage - GETCONTENTTYPE Get the getContentType property +#### adx.control.models.TrustedExternalTenant.TrustedExternalTenant +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.BlobItemProperties.getContentLanguage* +### adx.control.models.VirtualNetworkConfiguration -```notalanguage - GETCONTENTLANGUAGE Get the getContentLanguage property +Superclass: adx.control.JSONMapper +```text +VirtualNetworkConfiguration A class that contains virtual network definition. + + VirtualNetworkConfiguration Properties: + subnetId - The subnet resource id. - type: string + enginePublicIpId - Engine service''s public IP address resource id. - type: string + dataManagementPublicIpId - Data management''s service public IP address resource id. - type: string ``` -*azure.storage.blob.models.BlobItemProperties.getContentEncoding* - -```notalanguage - GETCONTENTENCODING Get the getContentEncoding property +#### adx.control.models.VirtualNetworkConfiguration.VirtualNetworkConfiguration +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.models.BlobItemProperties.getCacheControl* +### adx.control.models.systemData -```notalanguage - GETCACHECONTROL Get the cacheControl property +Superclass: adx.control.JSONMapper +```text +systemData Metadata pertaining to creation and last modification of the resource. + + systemData Properties: + createdBy - The identity that created the resource. - type: string + createdByType - The type of identity that created the resource. - type: string + createdAt - The timestamp of resource creation (UTC). - type: datetime + lastModifiedBy - The identity that last modified the resource. - type: string + lastModifiedByType - The type of identity that last modified the resource. - type: string + lastModifiedAt - The timestamp of resource last modification (UTC) - type: datetime ``` +#### adx.control.models.systemData.systemData -#### azure.storage.blob.models.BlobListDetails +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.systemDataCreatedByTypeEnum -```notalanguage - BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs +Superclass: adx.control.JSONEnum +```text +systemDataCreatedByTypeEnum No description provided ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveVersions* +```text +Enumeration values: + User + Application + ManagedIdentity + Key + +``` -```notalanguage - GETRETRIEVEVERSIONS Whether versions should be returned +#### adx.control.models.systemDataCreatedByTypeEnum.systemDataCreatedByTypeEnum +```text +systemDataCreatedByTypeEnum No description provided ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs* +### adx.control.models.systemDataLastModifiedByTypeEnum -```notalanguage - GETRETRIEVEUNCOMMITTEDBLOBS Whether blob tags should be returned +Superclass: adx.control.JSONEnum +```text +systemDataLastModifiedByTypeEnum No description provided ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveTags* +```text +Enumeration values: + User + Application + ManagedIdentity + Key -```notalanguage - GETRETRIEVETAGS Whether blob tags should be returned +``` + +#### adx.control.models.systemDataLastModifiedByTypeEnum.systemDataLastModifiedByTypeEnum +```text +systemDataLastModifiedByTypeEnum No description provided ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots* +### adx.control.BaseClient -```notalanguage - GETRETRIEVESNAPSHOTS Whether snapshots should be returned +Superclasses: handle, matlab.mixin.CustomDisplay +```text +BASECLIENT Base class for RESTful adx services. + Includes common initialization and authentication code. Authentication + code may have to be manually updated after code generation. + + This class cannot be instantiated directly, work with classes derived + from it to actually interact with the RESTful service. ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveMetadata* - -```notalanguage - GETRETRIEVEMETADATA Whether blob metadata should be returned +#### adx.control.BaseClient.BaseClient +```text +adx.control.BaseClient constructor to be called from + derived classes to allow setting properties upon construction ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold* +#### adx.control.BaseClient.applyCookies -```notalanguage - GETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +```text +adx.control.BaseClient/applyCookies is a function. + request = applyCookies(obj, request, uri) +``` + +#### adx.control.BaseClient.getOAuthToken +```text +GETOAUTHTOKEN called by requestAuth to obtain OAuth token. + + To be customized after code generation. + + This template method simply returns the bearerToken of the object + which is assumed to have been manually set after manually having + completed the OAuth flow. Typically this method should be + customized to return a properly cached still valid token, refresh + an cached expired token just-in-time or perform the entire OAuth + flow from the start just-in-time and cache the token. + + As the exact OAuth flow may vary by OAuth provider, the full + authentication flow is not automatically generated and the + template method simply returns the bearerToken property. ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy* +#### adx.control.BaseClient.getPropertyGroups + +```text +Redact properties such that tokens, etc. do not show up + in Command Window output +``` -```notalanguage - GETRETRIEVEIMMUTABILITYPOLICY Whether immutability policy for the blob should be returned +#### adx.control.BaseClient.loadConfigFile +```text +Loads client and http properties from a JSON file ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions* +#### adx.control.BaseClient.postSend + +```text +POSTSEND is called by every operation right after sending the + request. This method can for example be customized to add + customized error handling if the API responds to errors in a + consistent way. + + If the responses of only a few operations need to be customized + it is recommended to modify the generated operation methods + in the Api classes themselves rather than modifying postSend. + + By default the generated postSend does not do anything, it just + returns the response as is. +``` -```notalanguage - GETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning +#### adx.control.BaseClient.preSend +```text +PRESEND is called by every operation right before sending the + request. This method can for example be customized to add a + header to all (or most) requests if needed. + + If the requests of only a few operations need to be customized + it is recommended to modify the generated operation methods + in the Api classes themselves rather than modifying preSend. + + By default the generated preSend does not do anything, it just + returns the inputs as is. ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs* +#### adx.control.BaseClient.requestAuth + +```text +REQUESTAUTH will be called by operations which require + authentication. May have to be extended or modified after code + generation. For example, authentication methods not present in the + service OpenAPI spec or methods not directly supported by the + generator will have to be added. Generated logic may also not be + 100% correct if the OpenAPI spec contained multiple different + authentication methods of the same type. +``` -```notalanguage - GETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +#### adx.control.BaseClient.setCookies +```text +adx.control.BaseClient/setCookies is a function. + setCookies(obj, history) ``` -*azure.storage.blob.models.BlobListDetails.getRetrieveCopy* +### adx.control.CookieJar -```notalanguage - GETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +Superclass: handle +```text +COOKIEJAR helper class in MATLAB Generator for OpenAPI package, + provides a cookie jar. A cookie jar holds cookies which are typically + set by Set-Cookie headers in HTTP(S) requests and it can return the + cookies which should be included in a request to a given URL. + + CookieJar Properties: + path - Directory where to save cookies.mat + + CookieJar Methods: + setCookies - Adds cookies to the jar. + getCookies - Return an array of cookies which match the given URL + + persist - Forces cookie jar to be saved to disk + load - Forces cookie jar to be loaded from disk + purge - Empties the entire cookie jar and deletes cookies from + disk ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveVersions* +#### adx.control.CookieJar.CookieJar + +```text +COOKIEJAR helper class in MATLAB Generator for OpenAPI package, + provides a cookie jar. A cookie jar holds cookies which are typically + set by Set-Cookie headers in HTTP(S) requests and it can return the + cookies which should be included in a request to a given URL. + + CookieJar Properties: + path - Directory where to save cookies.mat + + CookieJar Methods: + setCookies - Adds cookies to the jar. + getCookies - Return an array of cookies which match the given URL + + persist - Forces cookie jar to be saved to disk + load - Forces cookie jar to be loaded from disk + purge - Empties the entire cookie jar and deletes cookies from + disk +``` -```notalanguage - SETRETRIEVEUNCOMMITTEDBLOBS Whether versions should be returned +#### adx.control.CookieJar.getCookies +```text +GETCOOKIES returns an array of matlab.net.http.Cookie for the + given URI which must be provided as first input. ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs* +#### adx.control.CookieJar.load + +```text +LOAD forces cookie jar to be loaded from disk. This method is + also called automatically by the constructor. Can be called + with a alternative directory as input to force saving + cookies.mat to this alternative location. The CookieJar + instance is then also reconfigured to continue working with + this new location. +``` -```notalanguage - SETRETRIEVEUNCOMMITTEDBLOBS Whether blob metadata should be returned +#### adx.control.CookieJar.persist +```text +PERSIST forces cookie jar to be saved to disk. This method is + also called automatically by setCookies if new cookies are + added. Can be called with a alternative directory as input to + force saving cookies.mat to this alternative location. The + CookieJar instance is then also reconfigured to continue + working with this new location. ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveTags* +#### adx.control.CookieJar.purge + +```text +PURGE completely empties the cookie jar and also deletes + cookies.mat from disk. +``` -```notalanguage - setRetrieveTags Whether blob tags should be returned +#### adx.control.CookieJar.setCookies +```text +SETCOOKIES Adds cookies to the jar. Expects an array of + matlab.net.http.CookieInfo as input. This can for example be + obtained using matlab.net.http.CookieInfo.collectFromLog or + by manually instantiating matlab.net.http.CookieInfo. + + See Also: matlab.net.http.CookieInfo.collectFromLog ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots* +### adx.control.JSONEnum + +```text +JSONEnum Base class for enumerations when working with adx.control.JSONMapper + When adding enumeration properties to adx.control.JSONMapper objects, the custom + enumeration classes must inherit from this JSONEnum base class. And + the custom enumeration class must declare string values for each enum + element, these represent the JSON representation of the enumeration + values; this is required since not all JSON values are guaranteed to + be valid MATLAB variable names whereas the actual MATLAB enumeration + values must be. + + Example: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL.1") + VAL2 ("VAL.2") + end + end + + Even if JSON values are valid MATLAB variables, the string value must + be provided, e.g.: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL1") + VAL2 ("VAL2") + end + end +``` + +#### adx.control.JSONEnum.JSONEnum + +```text +JSONEnum Base class for enumerations when working with adx.control.JSONMapper + When adding enumeration properties to adx.control.JSONMapper objects, the custom + enumeration classes must inherit from this JSONEnum base class. And + the custom enumeration class must declare string values for each enum + element, these represent the JSON representation of the enumeration + values; this is required since not all JSON values are guaranteed to + be valid MATLAB variable names whereas the actual MATLAB enumeration + values must be. + + Example: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL.1") + VAL2 ("VAL.2") + end + end + + Even if JSON values are valid MATLAB variables, the string value must + be provided, e.g.: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL1") + VAL2 ("VAL2") + end + end +``` -```notalanguage - setRetrieveSnapshots Whether snapshots should be returned +#### adx.control.JSONEnum.fromJSON +```text +adx.control.JSONEnum/fromJSON is a function. + v = fromJSON(obj, json) ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveMetadata* +### adx.control.JSONMapper -```notalanguage - SETRETRIEVEMETADATA Whether blob metadata should be returned +Superclass: handle +```text +adx.control.JSONMapper base class - adds JSON serialization and deserialization. + Derive MATLAB classes from this class to allow them to be + deserialized from JSON mapping the JSON fields to the class + properties. To allow proper nesting of object, derived objects must + call the adx.control.JSONMapper constructor from their constructor: + + function obj = myClass(s,inputs) + arguments + s {adx.control.JSONMapper.ConstructorArgument} = [] + inputs.?myClass + end + obj@adx.control.JSONMapper(s,inputs); + end + + Make sure to update the class name (myClass in the example) in both + the function name as well as in the arguments block. + + During serialization or deserialization the MATLAB object definition + is leading. JSON data is converted to MATLAB data types based on the + type declaration in MATLAB. Therefore all properties of the MATLAB + class *must* have a type declaration. Also, fields are only + deserialized if they actually exist on the MATLAB class, any + additional fields in the JSON input are ignored. + + Supported property datatypes: double, float, uint8, int8, uint16, + int16, uint32, int32, uint64, int64, logical, enum, string, char, + datetime (must be annotated), containers.Map, classes derived from + adx.control.JSONMapper. + + Annotations can be added to properties as "validation functions". + + adx.control.JSONMapper Methods: + + fieldName - allows property to be mapped to a JSON field with + different name + JSONArray - specifies field is a JSON array + epochDatetime - for datetime properties specifies in JSON the date + time is encoded as epoch. Must be the first + attribute if used + stringDatetime - for datetime properties specifies in JSON the date + time is encoded as string with a particular format. + Must be the first attribute if used. + doNotParse - indicate that a field's JSON should not be parsed. + if JSONArray is also applied the field will be + parsed at the array level. +``` + +#### adx.control.JSONMapper.ConstructorArgument + +```text +CONSTRUCTORARGUMENT to be used in derived constructors to + allow string or char arrays as input and allows the + constructor to be used when working with nested adx.control.JSONMapper + derived classes. +``` + +#### adx.control.JSONMapper.JSONArray + +```text +JSONARRAY adx.control.JSONMapper Annotation + Specified that the JSON field is an array. + + Ensures that when serializing a MATLAB scalar it is in fact + encoded as a JSON array rather than a scalar if the property + has been annotated with this option. ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold* +#### adx.control.JSONMapper.JSONMapper + +```text +adx.control.JSONMapper Constructor. Call this from + derived classes constructors: + + function obj = myClass(s,inputs) + arguments + s {adx.control.JSONMapper.ConstructorArgument} = [] + inputs.?myClass + end + obj@adx.control.JSONMapper(s,inputs); + end + + Make sure to update the class name (myClass in the example) + in both the function name as well as in the arguments block. +``` -```notalanguage - SETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +#### adx.control.JSONMapper.doNotParse +```text +adx.control.JSONMapper.doNotParse is a function. + adx.control.JSONMapper.doNotParse(~) ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy* +#### adx.control.JSONMapper.epochDatetime + +```text +EPOCHDATETIME adx.control.JSONMapper Annotation + When working with datetime fields either epochDatetime or + stringDatetime annotation is required to specify how the + datetime is encoded in JSON. This must be the first + annotation. + + When called without inputs POSIX time/UNIX timestamp is + assumed. + + Optional Name-Value pairs TimeZone, Epoch and TicksPerSecond + can be provided (their meaning is the same as when working + with datetime(d,'ConvertFrom','epochtime', OPTIONS). + + Example: + + properties + % start_date is a UNIX timestamp + start_date {adx.control.JSONMapper.epochDatetime} + % end_date is UNIX timestamp in milliseconds + end_date {adx.control.JSONMapper.epochDatetime(end_date,'TicksPerSecond',1000)} + end +``` -```notalanguage - SETRETRIEVEIMMUTABILITYPOLICY Whether blobs which have been deleted with versioning should be returned +#### adx.control.JSONMapper.fieldName +```text +FIELDNAME adx.control.JSONMapper Annotation + This can be added to properties if the MATLAB property name + and JSON field name differ. For example, when the JSON field + name is not a valid MATLAB identifier. + + Example: + + properties + some_field {adx.control.JSONMapper.fieldName(some_field,"some.field")} + end ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions* +#### adx.control.JSONMapper.fromJSON -```notalanguage - SETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning should be returned +```text +adx.control.JSONMapper/fromJSON is a function. + obj = fromJSON(obj, json) +``` + +#### adx.control.JSONMapper.getPayload +```text +GETPAYLOAD JSON encodes the object taking into account + required and optional properties. + + Verifies that required properties have indeed been set. + Includes optional properties in the output. All other + properties are not included in the output. ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs* +#### adx.control.JSONMapper.jsonencode + +```text +JSONENCODE serializes object as JSON + Can serialize whole hierarchies of objects if all classes + in the hierarchy derive from adx.control.JSONMapper. + + The function should only ever be called with one input: the + object to be serialized. The second input is only meant to be + used internally when jsonencode is called recursively. + + Example: + + json = jsonencode(obj); +``` -```notalanguage - SETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +#### adx.control.JSONMapper.stringDatetime +```text +STRINGDATETIME adx.control.JSONMapper Annotation + When working with datetime fields either epochDatetime or + stringDatetime annotation is required to specify how the + datetime is encoded in JSON. This must be the first + annotation. + + stringDatetime requires the string format as input. + + Optional Name-Value pair TimeZone can be provided. + + Example: + + properties + start_date {adx.control.JSONMapper.stringDatetime(start_date,'yyyy-MM-dd''T''HH:mm:ss')} + end ``` -*azure.storage.blob.models.BlobListDetails.setRetrieveCopy* +### adx.control.JSONMapperMap -```notalanguage - SETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +Superclass: handle +```text +JSONMAPPERMAP Alternative to containers.Map for free-form key-value + pairs. The advantage of JSONMAPPERMAP over containers.Map is that + instances are not shared when used as a class property. ``` +#### adx.control.JSONMapperMap.JSONMapperMap -#### azure.storage.blob.models.BlobItem +```text +JSONMAPPERMAP Constructor. Can be called with key value pairs + as input to initialize the map with those keys and values. +``` -```notalanguage - BlobItem +#### adx.control.JSONMapperMap.disp +```text +DISP Displays keys and corresponding values in the map. ``` -*azure.storage.blob.models.BlobItem.getMetadata* - -```notalanguage - GETMETADATA Get the metadata property +#### adx.control.JSONMapperMap.jsonencode +```text +JSONENCODE JSON encodes the map. ``` -*azure.storage.blob.models.BlobItem.getName* +#### adx.control.JSONMapperMap.subsasgn -```notalanguage - GETNAME Returns the blob's name as a character vector +```text +SUBSASGN Assign or update a key-value pair in the map. +``` + +#### adx.control.JSONMapperMap.subsref +```text +SUBSREF retrieve a key value from the map. ``` -*azure.storage.blob.models.BlobItem.getProperties* +### adx.control.JSONPropertyInfo -```notalanguage - GETPROPERTIES Get the properties property +Superclass: handle +```text +JSONPROPERTYINFO class used by adx.control.JSONMapper internally ``` -*azure.storage.blob.models.BlobItem.getSnapshot* +#### adx.control.JSONPropertyInfo.JSONPropertyInfo + +```text +JSONPROPERTYINFO class used by adx.control.JSONMapper internally +``` -```notalanguage - GETSNAPSHOT Returns the blob's snapshot property as a character vector +#### adx.control.JSONPropertyInfo.getPropertyInfo +```text +For all public properties ``` -*azure.storage.blob.models.BlobItem.getTags* +### adx.data -```notalanguage - GETTAGS Get the tags property +### adx.data.api +### adx.data.api.Ingest + +Superclass: adx.control.BaseClient + +```text +Ingest Class to run an ingest command ``` -*azure.storage.blob.models.BlobItem.getVersionId* +#### adx.data.api.Ingest.Ingest + +```text +Call base constructor to override any configured settings +``` -```notalanguage - GETVERSIONID Returns the blob's versionId property as a character vector +#### adx.data.api.Ingest.ingestRun +```text +ingestRun ``` -*azure.storage.blob.models.BlobItem.isDeleted* +### adx.data.api.Management -```notalanguage - isDeleted Get the deleted property, returns a logical +Superclass: adx.control.BaseClient +```text +Management Class to run a management command ``` -*azure.storage.blob.models.BlobItem.isPrefix* - -```notalanguage - ISPREFIX Get the isPrefix property: If blobs are named to mimic a directory hierarchy +#### adx.data.api.Management.Management +```text +Call base constructor to override any configured settings ``` +#### adx.data.api.Management.getPropertyGroups -#### azure.storage.blob.models.StorageAccountInfo +```text +Redact properties such that tokens, etc. do not show up + in Command Window output -```notalanguage - STORAGEACCOUNTINFO Holds information related to the storage account - Currently only constructing an object based on and existing java object of - type StorageAccountInfo is supported. +Help for adx.data.api.Management/getPropertyGroups is inherited from superclass adx.control.BaseClient +``` +#### adx.data.api.Management.managementRun + +```text +managementRun ``` -*azure.storage.blob.models.StorageAccountInfo.getAccountKind* +### adx.data.api.Query -```notalanguage - GETACCOUNTKIND Describes the type of the storage account - Values: BLOB_STORAGE, BLOCK_BLOB_STORAGE, FILE_STORAGE, STORAGE, STORAGE_V2 - A character vector is returned rather than an enumeration +Superclass: adx.control.BaseClient +```text +Query Class to run a KQL query + + Example: + % Build a request object + request = adx.data.models.QueryRequest(); + colName = "myColumn"; + message = "Hello World"; + + % Set the KQL query fields + request.csl = sprintf('print %s="%s"', colName, message); + % Don't set the database use the default in .json config file + % request.db = "myDatabaseName" + % No adx.data.models.ClientRequestProperties required + % request.requestProperties + + % Create the Query object and run the request + query = adx.data.api.Query(); + % The default cluster to use is configured using a .json configuration file + % Run the query: + [code, result, response, requestId] = query.queryRun(request); %#ok + + if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); + else + error('Error running query: %s', request.csl); + end ``` +#### adx.data.api.Query.Query + +```text +Call base constructor to override any configured settings +``` -#### azure.storage.blob.sas.BlobServiceSasSignatureValues +#### adx.data.api.Query.queryRun -```notalanguage - BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service - When the values are set, use the generateSas method on the desired service - client to obtain a representation of the SAS which can then be applied to a - new client using the .sasToken(String) method on the desired client builder. +```text +queryRun Runs a KQL query - Example - bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); + Required argument(s) + queryRequest: A populated adx.data.models.QueryRequest that defines the + query, the database and potentially query properties. - Argument types: - expiryTime: datetime ideally with defined TimeZone to avoid any - confusion, if TimeZone is not set, 'local' is assumed - permissions: azure.storage.blob.sas.BlobSasPermission or - BlobContainerSasPermission - + Optional named arguments: + cluster: A cluster URL as a scalar string. + + apiVersion: URL path API version field, if not provided and the query starts + with "." v1 is used otherwise v2 is used. + + skipRowsArrayDecode: Returns a adx.data.models.QueryV2ResponseUnparsedRows where + the frames are parsed but the array of rows are not parsed + into individual values if true. Otherwise a + adx.data.models.QueryV2ResponseRaw is returned. + Only applied in the case of v2 APIs. + Default is false. + + skipResponseDecode: Logical flag to determine if the HTTP response should be + be parsed at all. If true the result is returned as a + adx.data.models.QueryV2ResponseRaw.empty or a + adx.data.models.QueryV1ResponseRaw.empty as appropriate. + Default is false. + + verbose: Logical to enable additional output. Default is false. + + Return values: + code: HTTP status code, 200 (matlab.net.http.StatusCode.OK) indicates success. + + result: Returned data is various forms or an ErrorResponse: + adx.control.models.ErrorResponse + adx.data.models.QueryV2ResponseRaw + adx.data.models.QueryV2ResponseUnparsedRows + adx.data.models.QueryV1ResponseRaw + + response: The original HTTP response to the matlab.net.http.RequestMessage.send + The response may have been optionally processed by the baseClient + postSend method. + + requestId: A UUID value generated and submitted with the query to + identify it. ``` +### adx.data.models -#### azure.storage.blob.sas.BlobContainerSasPermission +### adx.data.models.ClientRequestProperties -```notalanguage - BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. - Once the required values are set, the object should be serialized with - toString and set as the permissions field on a BlobSasSignatureValues - object +Superclass: adx.control.JSONMapper +```text +ClientRequestProperties Adds ClientRequestPropertiesOptions to a query + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement ``` -*azure.storage.blob.sas.BlobContainerSasPermission.parse* - -```notalanguage - PARSE Creates a BlobContainerSasPermission from the specified permissions string - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. - Expected characters are r, a, c, w, or d. +#### adx.data.models.ClientRequestProperties.ClientRequestProperties +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission* +### adx.data.models.ClientRequestPropertiesOptions -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +ClientRequestPropertiesOptions Request properties control how a query or command executes and returns results + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/request-properties#clientrequestproperties-options ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission* - -```notalanguage - HASCREATEPERMISSION Returns the create permission status - The result is returned as a logical +#### adx.data.models.ClientRequestPropertiesOptions.ClientRequestPropertiesOptions +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission* +### adx.data.models.Column -```notalanguage - HASDELETEPERMISSION Returns the delete permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +Column Represents a Column in a v2 API response ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission* - -```notalanguage - HASLISTPERMISSION Returns the list permission status - The result is returned as a logical. +#### adx.data.models.Column.Column +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission* +### adx.data.models.ColumnV1 -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +ColumnV1 Represents a Column in a v1 API response ``` -*azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission* - -```notalanguage - HASWRITEPERMISSION Returns the write permission status - The result is returned as a logical. +#### adx.data.models.ColumnV1.ColumnV1 +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission* +### adx.data.models.DataSetCompletion -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +DataSetCompletion Final field of a v2 response ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission* - -```notalanguage - SETCREATEPERMISSION Sets the create permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +#### adx.data.models.DataSetCompletion.DataSetCompletion +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission* +### adx.data.models.DataSetHeader -```notalanguage - SETDELETEPERMISSION Sets the delete permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +DataSetHeader Header field of a v2 response ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setListPermission* - -```notalanguage - SETLISTPERMISSION Sets the list permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +#### adx.data.models.DataSetHeader.DataSetHeader +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission* +### adx.data.models.DataTable -```notalanguage - SETREADPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +DataTable Represents a v1 API format table ``` -*azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission* - -```notalanguage - SETWRITEPERMISSION Sets the write permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +#### adx.data.models.DataTable.DataTable +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobContainerSasPermission.toString* +### adx.data.models.DataTableV1 -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +Superclass: adx.control.JSONMapper +```text +DataTableV1 Represents a v1 API format table ``` +#### adx.data.models.DataTableV1.DataTableV1 -#### azure.storage.blob.sas.BlobSasPermission +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS - Setting a value to true means that any SAS which uses these permissions will - grant permissions for that operation. - Once the required values are set, the object should be serialized with - toString and set as the permissions field on a BlobSasSignatureValues - object +### adx.data.models.DataTables -``` +Superclass: adx.control.JSONMapper -*azure.storage.blob.sas.BlobSasPermission.parse* +```text +DataTables Represents an array of v2 API tables +``` -```notalanguage - PARSE Creates a BlobSasPermission from the specified permissions string - A azure.storage.blob.sas.BlobSasPermission object is returned. - permString should be of type scalar string or character vector. - Throws an IllegalArgumentException if it encounters a character that does - not correspond to a valid permission. - This is a static method. - Expected characters are r, a, c, w, or d. +#### adx.data.models.DataTables.DataTables +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobSasPermission.hasAddPermission* +### adx.data.models.DataTablesV1 -```notalanguage - HASADDPERMISSION Returns the add permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +DataTablesV1 Represents an array of v1 API tables ``` -*azure.storage.blob.sas.BlobSasPermission.hasCreatePermission* +#### adx.data.models.DataTablesV1.DataTablesV1 -```notalanguage - HASCREATEPERMISSION Returns the create permission status - The result is returned as a logical +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` +### adx.data.models.IngestionResourcesSnapshot + +```text +INGESTIONRESOURCESSNAPSHOT Contains result of .get ingestion resources request + + Example: + + managementClient = adx.data.api.Management(); + [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources')); + if code == matlab.net.http.StatusCode.OK + irs = adx.data.models.IngestionResourcesSnapshot(result); + end + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/kusto-ingest-client-rest#retrieve-ingestion-resources ``` -*azure.storage.blob.sas.BlobSasPermission.hasDeletePermission* +#### adx.data.models.IngestionResourcesSnapshot.IngestionResourcesSnapshot -```notalanguage - HASDELETEPERMISSION Returns the delete permission status - The result is returned as a logical. +```text +INGESTIONRESOURCESSNAPSHOT Constructor for IngestionResourcesSnapshot object +``` + +#### adx.data.models.IngestionResourcesSnapshot.table +```text +TABLE Convert a IngestionResourcesSnapshot Data property to a MATLAB table ``` -*azure.storage.blob.sas.BlobSasPermission.hasReadPermission* +### adx.data.models.ManagementRequest -```notalanguage - HASREADPERMISSION Returns the read permission status - The result is returned as a logical. +Superclass: adx.control.JSONMapper +```text +ManagementRequest Defines a Request Object for a management query + If a database field is defined in the default configuration file + location its value will be used for the db property. ``` -*azure.storage.blob.sas.BlobSasPermission.hasWritePermission* - -```notalanguage - HASWRITEPERMISSION Returns the write permission status - The result is returned as a logical. +#### adx.data.models.ManagementRequest.ManagementRequest +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobSasPermission.setAddPermission* +### adx.data.models.QueryParameter -```notalanguage - SETADDPERMISSION Sets the add permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +QueryParameter Represents Key Value pairs for queries + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement ``` -*azure.storage.blob.sas.BlobSasPermission.setCreatePermission* - -```notalanguage - SETCREATEPERMISSION Sets the create permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobSasPermission object is returned. +#### adx.data.models.QueryParameter.QueryParameter +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.sas.BlobSasPermission.setDeletePermission* +### adx.data.models.QueryRequest -```notalanguage - SETDELETEPERMISSION Sets the delete permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobSasPermission object is returned. +Superclass: adx.control.JSONMapper +```text +QueryRequest Defines a Request Object for a query + If a database field is defined in the default configuration file + location its value will be used for the db property. ``` -*azure.storage.blob.sas.BlobSasPermission.setReadPermission* +#### adx.data.models.QueryRequest.QueryRequest -```notalanguage - SETREADPERMISSION Sets the read permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobSasPermission object is returned. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.QueryV1ResponseRaw +Superclass: adx.control.JSONMapper + +```text +QueryV1ResponseRaw Represents a v1 API response prior to conversion to a table or error ``` -*azure.storage.blob.sas.BlobSasPermission.setWritePermission* +#### adx.data.models.QueryV1ResponseRaw.QueryV1ResponseRaw -```notalanguage - SETWRITEPERMISSION Sets the write permission status - The permission argument should be of type logical. - A azure.storage.blob.sas.BlobSasPermission object is returned. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` +### adx.data.models.QueryV2ResponseRaw + +Superclass: adx.control.JSONMapper + +```text +QueryV2ResponseRaw Represents a v2 API response prior to conversion to a table or error ``` -*azure.storage.blob.sas.BlobSasPermission.toString* +#### adx.data.models.QueryV2ResponseRaw.QueryV2ResponseRaw -```notalanguage - TOSTRING Converts the given permissions to a String - A character vector is returned. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` +#### adx.data.models.QueryV2ResponseRaw.getDataSetCompletionFrame + +```text +adx.data.models.QueryV2ResponseRaw/getDataSetCompletionFrame is a function. + dataSetCompletion = getDataSetCompletionFrame(obj) ``` +#### adx.data.models.QueryV2ResponseRaw.getDataSetHeader -#### azure.storage.blob.specialized.BlobLeaseClient +```text +adx.data.models.QueryV2ResponseRaw/getDataSetHeader is a function. + dataSetHeader = getDataSetHeader(obj) +``` -```notalanguage - BLOBLEASECLIENT This class provides a client that contains all the - leasing operations for BlobContainerClient and BlobClient. This client - acts as a supplement to those clients and only handles leasing - operations. +### adx.data.models.QueryV2ResponseUnparsedRows + +Superclass: adx.control.JSONMapper +```text +QueryV2ResponseUnparsedRows Represents a v2 API response prior to conversion to a table or error Rows are not parsed ``` -*azure.storage.blob.specialized.BlobLeaseClient.breakLease* +#### adx.data.models.QueryV2ResponseUnparsedRows.QueryV2ResponseUnparsedRows -```notalanguage - BREAKLEASE Breaks the previously acquired lease, if it - exists. - - Returns the remaining time in the broken lease in seconds. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` +#### adx.data.models.QueryV2ResponseUnparsedRows.getDataSetCompletionFrame + +```text +adx.data.models.QueryV2ResponseUnparsedRows/getDataSetCompletionFrame is a function. + dataSetCompletion = getDataSetCompletionFrame(obj) ``` -*azure.storage.blob.specialized.BlobLeaseClient.changeLease* +#### adx.data.models.QueryV2ResponseUnparsedRows.getDataSetHeader -```notalanguage - CHANGELEASE Changes the lease ID. - - Returns the new lease ID. +```text +adx.data.models.QueryV2ResponseUnparsedRows/getDataSetHeader is a function. + dataSetHeader = getDataSetHeader(obj) +``` + +### adx.data.models.QueueIngestionMessage + +Superclass: adx.control.JSONMapper +```text +QueueIngestionMessage The message that the Kusto Data Management service expects to read from the input Azure Queue is a JSON document in the following format ``` -*azure.storage.blob.specialized.BlobLeaseClient.releaseLease* +#### adx.data.models.QueueIngestionMessage.QueueIngestionMessage -```notalanguage - RELEASELEASE Releases the previously acquired lease. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.Row +Superclass: adx.control.JSONMapper + +```text +Row Represents a row that is parsed by JSONMapper + Class not used pending updated JSONMapper capability to handle simple arrays ``` -*azure.storage.blob.specialized.BlobLeaseClient.renewLease* +#### adx.data.models.Row.Row -```notalanguage - RENEWLEASE Renews the previously acquired lease. - - Returns the renewed lease ID. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.RowUnparsed + +Superclass: adx.control.JSONMapper +```text +RowUnparsed Row data returned which is not to be parsed by JSONMapper + Value is held an an unparsed string ``` -*azure.storage.blob.specialized.BlobLeaseClient.acquireLease* +#### adx.data.models.RowUnparsed.RowUnparsed -```notalanguage - ACQUIRELEASE Acquires a lease for write and delete - operations. The lease duration must be between 15 to 60 - seconds or -1 for an infinite duration. - - Returns the lease ID. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.RowsUnparsed +Superclass: adx.control.JSONMapper + +```text +RowsUnparsed Row data returned which is not to be parsed by JSONMapper + Value is held an an unparsed string ``` -*azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl* +#### adx.data.models.RowsUnparsed.RowsUnparsed + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` -```notalanguage - GETRESOURCEURL Gets the URL of the lease client. +### adx.data.models.StreamFormat +```text +STREAMFORMAT Specifies the format of the data in the request body + The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro + See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats ``` -*azure.storage.blob.specialized.BlobLeaseClient.getLeaseId* +```text +Enumeration values: + CSV + TSV + SCsv + SOHsv + PSV + JSON + MultiJSON + Avro + +``` -```notalanguage - GETLEASEID Get the lease ID for this lease. +#### adx.data.models.StreamFormat.StreamFormat +```text +STREAMFORMAT Specifies the format of the data in the request body + The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro + See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats ``` +### adx.data.models.TableCompletion -#### azure.storage.blob.specialized.BlobLeaseClientBuilder +Superclass: adx.control.JSONMapper -```notalanguage - BLOBCLIENTBUILDER This class provides a fluent builder API to help aid - the configuration and instantiation of Storage Lease clients. +```text +TableCompletion Field to indicate the end of a table +``` + +#### adx.data.models.TableCompletion.TableCompletion +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient* +### adx.data.models.TableFragment -```notalanguage - BUILDCLIENT Creates a BlobLeaseClient based on the - configurations set in the builder. - - Returns a BlobLeaseClient based on the configurations in this - builder. +Superclass: adx.control.JSONMapper +```text +TableFragment A part of a returned table ``` -*azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId* +#### adx.data.models.TableFragment.TableFragment -```notalanguage - CONTAINERCLIENT Configures the builder based on the passed - BlobContainerClient. This will set the HttpPipeline and URL - that are used to interact with the service. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.TableFragmentType + +Superclass: adx.control.JSONEnum + +```text +TableFragmentType Describes what the client should do with this fragment + The value should be one of: + DataAppend + DataReplace - Returns the updated BlobLeaseClientBuilder object + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +```text +Enumeration values: + DataAppend + DataReplace ``` -*azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient* +#### adx.data.models.TableFragmentType.TableFragmentType -```notalanguage - CONTAINERCLIENT Configures the builder based on the passed - BlobContainerClient. This will set the HttpPipeline and URL - that are used to interact with the service. +```text +TableFragmentType Describes what the client should do with this fragment + The value should be one of: + DataAppend + DataReplace - Returns the updated BlobLeaseClientBuilder object + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +### adx.data.models.TableHeader +Superclass: adx.control.JSONMapper + +```text +TableHeader Header fields with top-level table properties ``` -*azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient* +#### adx.data.models.TableHeader.TableHeader -```notalanguage - BLOBCLIENT Configures the builder based on the passed - BlobClient. This will set the HttpPipeline and URL that are - used to interact with the service. +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.TableKind + +Superclass: adx.control.JSONEnum + +```text +TableKind Specifies the type of a Table response + The value should be one of: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown - Returns the updated BlobLeaseClientBuilder object + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +```text +Enumeration values: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown + +``` + +#### adx.data.models.TableKind.TableKind + +```text +TableKind Specifies the type of a Table response + The value should be one of: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +### adx.data.models.TableProgress + +Superclass: adx.control.JSONMapper +```text +TableProgress Indicates the percentage of a task task that is complete ``` +#### adx.data.models.TableProgress.TableProgress -#### azure.core.credential.TokenCredential +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### azure + +### azure.core + +### azure.core.credential -```notalanguage - TOKENCREDENTIAL Credential that can provide an access token +### azure.core.credential.AccessToken +Superclass: azure.object + +```text +ACCESSTOKEN An immutable access token with a token string and an expiration time + Can be created based on a corresponding Java com.azure.core.credential.AccessToken + argument or a token string and an expiry datetime (including a timezone). ``` -*azure.core.credential.TokenCredential.getToken* +#### azure.core.credential.AccessToken.AccessToken -```notalanguage - GETTOKEN Retrieves an AccessToken - An azure.core.credential.AccessToken is returned. +```text +ACCESSTOKEN An immutable access token with a token string and an expiration time + Can be created based on a corresponding Java com.azure.core.credential.AccessToken + argument or a token string and an expiry datetime (including a timezone). +``` + +#### azure.core.credential.AccessToken.getToken +```text +GETTOKEN Return token as a character vector. ``` +#### azure.core.credential.AccessToken.isExpired -#### azure.core.credential.AzureSasCredential +```text +ISEXPIRED Returns a logical if the token has expired or not +``` + +### azure.core.credential.AzureSasCredential -```notalanguage - AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate +Superclass: azure.object + +```text +AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/ +``` +#### azure.core.credential.AzureSasCredential.AzureSasCredential + +```text +AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate + + See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/ ``` -*azure.core.credential.AzureSasCredential.AzureSasSignature* +#### azure.core.credential.AzureSasCredential.AzureSasSignature -```notalanguage +```text azure.core.credential.AzureSasCredential/AzureSasSignature is a function. obj = AzureSasSignature(varargin) - ``` -*azure.core.credential.AzureSasCredential.getSignature* +#### azure.core.credential.AzureSasCredential.getSignature -```notalanguage - GETSIGNATURE Retrieves the shared access signature associated to this credential +```text +GETSIGNATURE Retrieves the shared access signature associated to this credential Returns a character vector. Copyright 2021 The MathWorks, Inc. - ``` -*azure.core.credential.AzureSasCredential.update* +#### azure.core.credential.AzureSasCredential.update -```notalanguage - UPDATE Rotates the shared access signature associated to this credential +```text +UPDATE Rotates the shared access signature associated to this credential Returns an updated AzureSasCredential object. - ``` +### azure.core.credential.TokenCredential -#### azure.core.credential.AccessToken - -```notalanguage - ACCESSTOKEN An immutable access token with a token string and an expiration time - Can be created based on a corresponding Java com.azure.core.credential.AccessToken - argument or a token string and an expiry datetime (including a timezone). +Superclass: azure.object +```text +TOKENCREDENTIAL Credential that can provide an access token ``` -*azure.core.credential.AccessToken.getToken* - -```notalanguage - GETTOKEN Return token as a character vector. +#### azure.core.credential.TokenCredential.TokenCredential +```text +TOKENCREDENTIAL Credential that can provide an access token ``` -*azure.core.credential.AccessToken.isExpired* +#### azure.core.credential.TokenCredential.getToken + +```text +GETTOKEN Asynchronously retrieves an AccessToken + An azure.core.credential.AccessToken is returned. + This call is invokes the getTokenSync method rather than + getToken intentionally. +``` -```notalanguage - ISEXPIRED Returns a logical if the token has expired or not +#### azure.core.credential.TokenCredential.getTokenSync +```text +GETTOKENSYNC Synchronously retrieves an AccessToken + An azure.core.credential.AccessToken is returned. ``` +### azure.core.credential.TokenRequestContext -#### azure.core.credential.TokenRequestContext +Superclass: azure.object -```notalanguage - TOKENREQUESTCONTEXT Contains details of a request to get a token +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token Can be created based on a corresponding com.azure.core.credential.TokenRequestContext Java object argument or without an argument where further configuration is required to add scopes. +``` + +#### azure.core.credential.TokenRequestContext.TokenRequestContext +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. ``` -*azure.core.credential.TokenRequestContext.addScopes* +#### azure.core.credential.TokenRequestContext.addScopes -```notalanguage - ADDSCOPES Adds one or more scopes to the request scopes +```text +ADDSCOPES Adds one or more scopes to the request scopes Scopes should be provided as character vector or scalar string arguments. The updated TokenRequestContext is returned. - ``` -*azure.core.credential.TokenRequestContext.getClaims* +#### azure.core.credential.TokenRequestContext.getClaims -```notalanguage - GETCLAIMS Get the additional claims to be included in the token +```text +GETCLAIMS Get the additional claims to be included in the token Returns a character vector. - ``` -*azure.core.credential.TokenRequestContext.getScopes* +#### azure.core.credential.TokenRequestContext.getScopes -```notalanguage - GETSCOPES Gets the scopes required for the token +```text +GETSCOPES Gets the scopes required for the token Returns a string array. - ``` -*azure.core.credential.TokenRequestContext.getTenantId* +#### azure.core.credential.TokenRequestContext.getTenantId -```notalanguage - GETTENANTID Get the tenant id to be used for the authentication request +```text +GETTENANTID Get the tenant id to be used for the authentication request Returns a character vector. - ``` -*azure.core.credential.TokenRequestContext.setClaims* +#### azure.core.credential.TokenRequestContext.setClaims -```notalanguage - SETCLAIMS Set the additional claims to be included in the token +```text +SETCLAIMS Set the additional claims to be included in the token The claims should be provided as a character vector or scalar string. Returns an updated azure.core.credential.TokenRequestContext. - ``` -*azure.core.credential.TokenRequestContext.setTenantId* +#### azure.core.credential.TokenRequestContext.setTenantId -```notalanguage - SETTENANTID Set the tenant id to be used for the authentication request +```text +SETTENANTID Set the tenant id to be used for the authentication request The tenantId should be provided as a character vector or scalar string. Returns an updated azure.core.credential.TokenRequestContext. - ``` +### azure.core.util -#### azure.core.util.polling.SyncPoller +### azure.core.util.polling -```notalanguage - SYNCPOLLER Simplifies executing long-running operations against Azure - There is no constructor as this is based on a Java interface. A SyncPoller - must be created based on the underlying SyncPoller Java object. +### azure.core.util.polling.LongRunningOperationStatus -``` +Superclass: azure.object -*azure.core.util.polling.SyncPoller.cancelOperation* +```text +LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation + The poll operation is considered complete when the status is one of: + SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED. + + Possible values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED +``` -```notalanguage - CANCELOPERATION Cancels the remote long-running operation - Requires cancellation to be supported by the service. +#### azure.core.util.polling.LongRunningOperationStatus.LongRunningOperationStatus +```text +LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation + The poll operation is considered complete when the status is one of: + SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED. + + Possible values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED ``` -*azure.core.util.polling.SyncPoller.poll* - -```notalanguage - POLL Poll once and return the poll response received - A azure.core.util.polling.PollResponse is returned. +#### azure.core.util.polling.LongRunningOperationStatus.fromString +```text +FROMSTRING Creates a LongRunningOperationStatus from its string representation + A name argument of type character vector or scalar string is required. + A logical isComplete argument is required. + A azure.core.util.LongRunningOperationStatus is returned. ``` -*azure.core.util.polling.SyncPoller.waitForCompletion* +#### azure.core.util.polling.LongRunningOperationStatus.isComplete -```notalanguage - WAITFORCOMPLETION Wait for polling to complete with optional timeout - A azure.core.util.polling.PollResponse is returned. - An optional timeout can be provided as a scalar number of seconds to - wait for polling to complete. The value will be converted to an integer value - of seconds. +```text +ISCOMPLETE Returns a logical to represent if in a completed state or not +``` +#### azure.core.util.polling.LongRunningOperationStatus.toString + +```text +TOSTRING Returns a string representation of LongRunningOperationStatus + Expected values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED + + A character vector is returned. ``` +### azure.core.util.polling.PollResponse -#### azure.core.util.polling.PollResponse +Superclass: azure.object -```notalanguage - POLLRESPONSE Represents a response from long-running polling operation +```text +POLLRESPONSE Represents a response from long-running polling operation It provides information such as the current status of the long-running operation and any value returned in the poll. @@ -4579,990 +10052,7235 @@ azure.core.credential.AzureSasCredential/AzureSasSignature is a function. Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus or azure.core.util.polling.LongRunningOperationStatus status argument and a message argument of type character vector or scalar string. - ``` -*azure.core.util.polling.PollResponse.getRetryAfter* +#### azure.core.util.polling.PollResponse.PollResponse -```notalanguage - GETRETRYAFTER Gets requested delay until next polling operation is performed - If a negative value is returned the poller should determine on its own when - the next poll operation is to occur. - -``` +```text +POLLRESPONSE Represents a response from long-running polling operation + It provides information such as the current status of the long-running + operation and any value returned in the poll. + + Can be created based on a corresponding com.azure.core.util.polling.PollResponse + Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus + or azure.core.util.polling.LongRunningOperationStatus status argument and a + message argument of type character vector or scalar string. +``` -*azure.core.util.polling.PollResponse.getStatus* +#### azure.core.util.polling.PollResponse.getRetryAfter -```notalanguage - GETSTATUS Gets status of a long-running operation at last polling operation +```text +GETRETRYAFTER Gets requested delay until next polling operation is performed + If a negative value is returned the poller should determine on its own when + the next poll operation is to occur. +``` + +#### azure.core.util.polling.PollResponse.getStatus +```text +GETSTATUS Gets status of a long-running operation at last polling operation ``` -*azure.core.util.polling.PollResponse.getValue* +#### azure.core.util.polling.PollResponse.getValue -```notalanguage - GETVALUE The value returned as a result of the last successful poll operation +```text +GETVALUE The value returned as a result of the last successful poll operation This can be any custom user defined object, or null if no value was returned from the service. The return value will be subject to standard MATLAB to Java data type conversion and the following conversions: java.lang.String -> character vector - ``` +### azure.core.util.polling.SyncPoller -#### azure.core.util.polling.LongRunningOperationStatus - -```notalanguage - LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation - The poll operation is considered complete when the status is one of: - SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED. - - Possible values are: - FAILED - IN_PROGRESS - NOT_STARTED - SUCCESSFULLY_COMPLETED - USER_CANCELLED +Superclass: azure.object +```text +SYNCPOLLER Simplifies executing long-running operations against Azure + There is no constructor as this is based on a Java interface. A SyncPoller + must be created based on the underlying SyncPoller Java object. ``` -*azure.core.util.polling.LongRunningOperationStatus.fromString* - -```notalanguage - FROMSTRING Creates a LongRunningOperationStatus from its string representation - A name argument of type character vector or scalar string is required. - A logical isComplete argument is required. - A azure.core.util.LongRunningOperationStatus is returned. +#### azure.core.util.polling.SyncPoller.SyncPoller +```text +SYNCPOLLER Simplifies executing long-running operations against Azure + There is no constructor as this is based on a Java interface. A SyncPoller + must be created based on the underlying SyncPoller Java object. ``` -*azure.core.util.polling.LongRunningOperationStatus.isComplete* - -```notalanguage - ISCOMPLETE Returns a logical to represent if in a completed state or not +#### azure.core.util.polling.SyncPoller.cancelOperation +```text +CANCELOPERATION Cancels the remote long-running operation + Requires cancellation to be supported by the service. ``` -*azure.core.util.polling.LongRunningOperationStatus.toString* +#### azure.core.util.polling.SyncPoller.poll -```notalanguage - TOSTRING Returns a string representation of LongRunningOperationStatus - Expected values are: - FAILED - IN_PROGRESS - NOT_STARTED - SUCCESSFULLY_COMPLETED - USER_CANCELLED - - A character vector is returned. +```text +POLL Poll once and return the poll response received + A azure.core.util.polling.PollResponse is returned. +``` + +#### azure.core.util.polling.SyncPoller.waitForCompletion +```text +WAITFORCOMPLETION Wait for polling to complete with optional timeout + A azure.core.util.polling.PollResponse is returned. + An optional timeout can be provided as a scalar number of seconds to + wait for polling to complete. The value will be converted to an integer value + of seconds. ``` +### azure.identity -#### azure.security.keyvault.secrets.SecretClientBuilder +### azure.identity.AuthenticationRecord -```notalanguage - SECRETCLIENTBUILDER builder for SecretClient - Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder - object as an argument to build a MATLAB builder from the Java builder. +Superclass: azure.object +```text +Represents the account information relating to an authentication request + Held as a Java reactor.core.publisher.MonoMap. ``` -*azure.security.keyvault.secrets.SecretClientBuilder.buildClient* +#### azure.identity.AuthenticationRecord.AuthenticationRecord + +```text +Represents the account information relating to an authentication request + Held as a Java reactor.core.publisher.MonoMap. +``` -```notalanguage - BUILDCLIENT Creates a SecretClient based on options configured in the builder +#### azure.identity.AuthenticationRecord.subscribe +```text +SUBSCRIBE Subscribe to this Mono and request unbounded demand + Used to trigger the device code challenge flow. + Returns a Java reactor.core.publisher.LambdaMonoSubscriber object. + The return value is not normally required. ``` -*azure.security.keyvault.secrets.SecretClientBuilder.credential* +### azure.identity.AzureCliCredential -```notalanguage - CREDENTIAL Sets the credentials used to authorize a client's requests - An updated builder object is returned. - - Example: - configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); - credentials = configureCredentials(configFilePath); - builder = builder.credential(credentials); +Superclass: azure.core.credential.TokenCredential +```text +AZURECLICREDENTIAL Provides token credentials based on Azure CLI command + If the CLI is installed and authenticated there is no need to further + authenticate within MATLAB. + A object is created based on a corresponding Java com.azure.identity.AzureCliCredential + object. ``` -*azure.security.keyvault.secrets.SecretClientBuilder.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. Other options may be added - in the future. An updated builder object is returned. - This method will apply http proxy settings if defined in MATLAB Web preferences. +#### azure.identity.AzureCliCredential.AzureCliCredential +```text +Created using a AzureCliCredential java object from the + AzureCliCredentialBuilder class only ``` -*azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl* +### azure.identity.AzureCliCredentialBuilder -```notalanguage - VAULTURL Sets the vault URL to send HTTP requests to - The vaultUrl should be of type character vector or scalar string. - An updated builder object is returned. - A URL has the form: https://.vault.azure.net/ - The vaultUrl can optionally be stored in the package's JSON configuration file. +Superclass: azure.identity.CredentialBuilderBase +```text +AZURECLICREDENTIALBUILDER Credential builder for instantiating a AzureCliCredential ``` +#### azure.identity.AzureCliCredentialBuilder.AzureCliCredentialBuilder -#### azure.security.keyvault.secrets.SecretClient +```text +AZURECLICREDENTIALBUILDER Credential builder for instantiating a AzureCliCredential +``` -```notalanguage - SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault - - Example - % Create a Secret client using the higher-level createKeyVaultClient() function - % Here an optional non default configuration file path is provided that holds - % Client Secret style credentials: - secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') - - Or - - % If a configuration file path is not provided *createKeyVaultClient()* will search - % MATLAB path for a configuration file named ```keyvaultsettings.json```: - secretClient = createKeyVaultClient('Type','Secret'); - - Or - - % Alternatively a client can also be created manually using the builder for - % this class: - % Create a client builder object, a SecretClient in this case - builder = azure.security.keyvault.secrets.SecretClientBuilder(); - - % Configure a credentials object based on a JSON config file - credentials = configureCredentials(which('keyvaultsettings.json')); - - % Configure the builder using its methods - builder = builder.credential(credentials); - builder = builder.httpClient(); - settings = loadConfigurationSettings(which('keyvaultsettings.json')); - builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); - - % Create the client - secretClient = builder.buildClient(); +#### azure.identity.AzureCliCredentialBuilder.build +```text +BUILD Creates new AzureCliCredential with the configured options set ``` -*azure.security.keyvault.secrets.SecretClient.beginDeleteSecret* +### azure.identity.ChainedTokenCredential -```notalanguage - BEGINDELETESECRET Deletes a secret by name from Key Vault - A azure.core.util.polling.syncPoller is returned. - keyName can be provided as a scalar character vector or string. - - Example: - secret = secretClient.getSecret('mySecretName'); - syncPoller = secretClient.beginDeleteSecret('mySecretName'); - % Block until completion, allow a 10 second timeout - syncPoller.waitForCompletion(10); - % Other syncPoller methods are available +Superclass: azure.core.credential.TokenCredential +```text +CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers ``` -*azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret* - -```notalanguage - BEGINRECOVERDELETEDSECRET Recovers the deleted secret in the key vault to - its latest version. Can only be performed on a soft-delete enabled vault. - This operation requires the secrets/recover permission. - A azure.core.util.polling.syncPoller is returned. - secretName can be provided as a scalar character vector or string. - - Example: - syncPoller = secretClient.beginRecoverDeletedSecret('myDeletedSecretName'); - % Block until completion, allow a 10 second timeout - syncPoller.waitForCompletion(10); - % Other syncPoller methods are available +#### azure.identity.ChainedTokenCredential.ChainedTokenCredential +```text +CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers ``` -*azure.security.keyvault.secrets.SecretClient.getDeletedSecret* +### azure.identity.ChainedTokenCredentialBuilder -```notalanguage - GETDELETEDSECRET Gets a secret that has been deleted for a soft-delete enabled key vault. - The name can be provided as a scalar character vector or string. - An exception is thrown is a secret does not exist otherwise a - azure.security.keyvault.secrets.models.DeletedSecret is returned. - - Example - deletedSecret = secretClient.getDeletedSecret('mySecretName'); +Superclass: azure.object +```text +CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential ``` -*azure.security.keyvault.secrets.SecretClient.getSecret* - -```notalanguage - GETSECRETS Returns the secret value of the specific secret by name - The name can be provided as a scalar character vector or string. - An exception is thrown is a secret does not exist otherwise a - azure.security.keyvault.secrets.models.KeyVaultSecret is returned. - - Example - secret = secretClient.getsecret('mySecretName'); +#### azure.identity.ChainedTokenCredentialBuilder.ChainedTokenCredentialBuilder +```text +CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential ``` -*azure.security.keyvault.secrets.SecretClient.getVaultUrl* +#### azure.identity.ChainedTokenCredentialBuilder.addLast -```notalanguage - GETVAULTURL Gets the vault endpoint url to which service requests are sent to - A character vector is returned. - A URL has the form: https://.vault.azure.net/ - The vaultUrl can optionally be stored in the package's JSON configuration file. +```text +ADDLAST Adds a credential to try to authenticate at the end of the chain +``` +#### azure.identity.ChainedTokenCredentialBuilder.build + +```text +BUILD Creates new ChainedTokenCredential with the configured options set ``` -*azure.security.keyvault.secrets.SecretClient.listDeletedSecrets* +### azure.identity.ClientCertificateCredential -```notalanguage - LISTDELETEDSECRETS Lists deleted secrets of the key vault if it has - enabled soft-delete. This operation requires the secrets/list permission. - Properties are returned as an array of - azure.security.keyvault.secrets.models.DeletedSecret objects. - If there are no secrets an empty array is returned. - - Example: - % Get a list of the deleted secrets - deletedSecrets = secretClient.listDeletedSecrets(); - % Look at some of the data returned i.e. the secret name - deletedSecrets(1).getName(); +Superclass: azure.core.credential.TokenCredential +```text +CLIENTCERTIFICATECREDENTIAL AAD credential acquires a token with a client certificate ``` -*azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets* - -```notalanguage - LISTPROPERTIESOFSECRETS Lists secrets in the key vault - Properties are returned as an array of - azure.security.keyvault.secrets.models.SecretProperties objects. - If there are no secrets an empty array is returned. - - Example: - % Get a list the secret properties - secretProperties = secretClient.listPropertiesOfSecrets(); - % Look at some of the data returned i.e. the secret name - propList(1).getName(); +#### azure.identity.ClientCertificateCredential.ClientCertificateCredential +```text +Created using a ClientCertificateCredential java object from the + ClientCertificateCredentialBuilder class only ``` -*azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret* +### azure.identity.ClientCertificateCredentialBuilder -```notalanguage - PURGEDELETEDSECRET Permanently removes a deleted secret, without the - possibility of recovery. This operation can only be performed on a - soft-delete enabled vault. This operation requires the secrets/purge - permission. - - Throws an error on failure, does not return anything at all upon success. - - Example - secretClient.purgeDeletedSecret('mySecretName'); +Superclass: azure.identity.CredentialBuilderBase +```text +CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential ``` -*azure.security.keyvault.secrets.SecretClient.setSecret* +#### azure.identity.ClientCertificateCredentialBuilder.ClientCertificateCredentialBuilder -```notalanguage - SETSECRETS Creates a secrets using a name and value - This method returns an azure.security.keyvault.secrets.KeyVaultSecret - object. secretName and secretValue can be provided as character vectors or - scalar strings. - - Example: - % Create a SecretClient object - sc = createKeyVaultClient('Type','Secret'); - % Set the secret name and its value to Azure KeyVault - keyVaultSecret = sc.setSecret(secretName, secretValue); +```text +CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential +``` + +#### azure.identity.ClientCertificateCredentialBuilder.authorityHost +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated ClientCertificateCredentialBuilder is returned. ``` +#### azure.identity.ClientCertificateCredentialBuilder.build -#### azure.security.keyvault.secrets.models.DeletedSecret +```text +BUILD Creates new ClientCertificateCredential with the configured options set +``` -```notalanguage - DELETEDSECRET Deleted Secret is the resource consisting of name, - recovery id, deleted date, scheduled purge date and its attributes - inherited from KeyVaultSecret. It is managed by Secret Service. - - DeletedSecret follows the Azure KeyVault Java SDK design, meaning - that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret - methods like getValue. It appears however that this method does not - actually return a value for deleted secrets. These are all behaviors - of the underlying Azure KeyVault Java SDK and not MATLAB specific - behaviors. +#### azure.identity.ClientCertificateCredentialBuilder.clientId +```text +CLIENTID Sets client id + An updated ClientCertificateCredentialBuilder is returned. ``` -*azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate* +#### azure.identity.ClientCertificateCredentialBuilder.pemCertificate -```notalanguage - GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. - A datetime object is returned. +```text +PEMCERTIFICATE Sets the path of the PEM certificate for authenticating to AAD + An updated ClientCertificateCredentialBuilder is returned. +``` + +#### azure.identity.ClientCertificateCredentialBuilder.tenantId +```text +TENANTID Sets tenant id to authenticate through ClientCertificateCredential + An updated ClientCertificateCredentialBuilder is returned. ``` -*azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId* +### azure.identity.ClientSecretCredential -```notalanguage - GETRECOVERYID Get the recoveryId identifier. - The URI is returned as character array. +Superclass: azure.core.credential.TokenCredential +```text +CLIENTSECRETCREDENTIAL AAD credential acquires a token with a client secret ``` -*azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn* +#### azure.identity.ClientSecretCredential.ClientSecretCredential -```notalanguage - GETDELETEDON Get the deleted UTC time. - A datetime object is returned. +```text +Created using a ClientSecretCredential java object from the + ClientSecretCredentialBuilder class only +``` +### azure.identity.ClientSecretCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder ``` +#### azure.identity.ClientSecretCredentialBuilder.ClientSecretCredentialBuilder -#### azure.security.keyvault.secrets.models.KeyVaultSecret +```text +CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder +``` -```notalanguage - KEYVAULTSECRET Class to provide access to the KeyVaultSecret object - Creates a azure.security.keyvault.secrets.models.KeyVaultSecret object. - A KeyVaultSecret can be created from a name and value or an equivalent Java - object. A number of methods return KeyVaultSecret objects. - - - Example - % Get a KeyVaultSecret object - secret = secretClient.getSecret('mySecretName'); - value = secret.getValue(); - - Or - - secret = azure.security.keyvault.secrets.models.KeyVaultSecret(secretName, secretValue); - - Or - - secret = azure.security.keyvault.secrets.models.KeyVaultSecret(javaKeyVaultSecret); +#### azure.identity.ClientSecretCredentialBuilder.authorityHost +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated ClientSecretCredentialBuilder is returned. ``` -*azure.security.keyvault.secrets.models.KeyVaultSecret.getId* +#### azure.identity.ClientSecretCredentialBuilder.build -```notalanguage - GETID Returns the ID value of the secret - A character vector is returned. +```text +BUILD Creates new ClientSecretCredential with the configured options set +``` + +#### azure.identity.ClientSecretCredentialBuilder.clientId +```text +CLIENTID Sets client id + An updated ClientSecretCredentialBuilder is returned. ``` -*azure.security.keyvault.secrets.models.KeyVaultSecret.getName* +#### azure.identity.ClientSecretCredentialBuilder.clientSecret -```notalanguage - GETNAME Returns the name of the secret - A character vector is returned. +```text +CLIENTID Sets the client secret for the authentication + An updated ClientSecretCredentialBuilder is returned. +``` +#### azure.identity.ClientSecretCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through ClientSecretCredential + An updated ClientSecretCredentialBuilder is returned. ``` -*azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties* +### azure.identity.CredentialBuilderBase -```notalanguage - GETPROPERTIES Get the secret properties - A azure.security.keyvault.secrets.models.SecretProperties is returned. +Superclass: azure.object +```text +azure.identity.CredentialBuilderBase is a class. + obj = azure.identity.CredentialBuilderBase ``` -*azure.security.keyvault.secrets.models.KeyVaultSecret.getValue* +#### azure.identity.CredentialBuilderBase.CredentialBuilderBase -```notalanguage - GETVALUE Returns the secret value - A character vector is returned. - - Example: - sc = createKeyVaultClient('Type','Secret'); - secret = sc.getSecret('mySecretName'); - secretValue = secret.getValue(); +```text +azure.identity.CredentialBuilderBase/CredentialBuilderBase is a constructor. + obj = azure.identity.CredentialBuilderBase +``` + +#### azure.identity.CredentialBuilderBase.httpClient +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. ``` +### azure.identity.DefaultAzureCredential -#### azure.security.keyvault.secrets.models.SecretProperties +Superclass: azure.core.credential.TokenCredential -```notalanguage - SECRETPROPERTIES Contains the properties of the secret but not its value - - Example: - secretClient = createKeyVaultClient('Type','Secret'); - propList = secretClient.listPropertiesOfSecrets(); - % Look at a name in a returned property - name = propList(1).getName(); +```text +DEFAULTAZURECREDENTIAL Creates credential from environment or the shared token + It tries to create a valid credential in the following order: + EnvironmentCredential + ManagedIdentityCredential + SharedTokenCacheCredential + IntelliJCredential + VisualStudioCodeCredential + AzureCliCredential + Fails if none of the credentials above could be created. +``` + +#### azure.identity.DefaultAzureCredential.DefaultAzureCredential + +```text +Created using a DefaultAzureCredential java object from the + DefaultAzureCredentialBuilder class only +``` + +### azure.identity.DefaultAzureCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential +``` + +#### azure.identity.DefaultAzureCredentialBuilder.DefaultAzureCredentialBuilder + +```text +DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential +``` + +#### azure.identity.DefaultAzureCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated DefaultAzureCredentialBuilder is returned. +``` + +#### azure.identity.DefaultAzureCredentialBuilder.build + +```text +BUILD Creates new DefaultAzureCredential with the configured options set +``` + +#### azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId + +```text +MANAGEDIDENTITYCLIENTID Specifies client ID of user or system assigned identity + This credential can be used when in an environment with managed identities. + If unset, the value in the AZURE_CLIENT_ID environment variable will be used. + If neither is set, the default value is null and will only work with system + assigned managed identities and not user assigned managed identities. + An updated DefaultAzureCredentialBuilder is returned. +``` + +#### azure.identity.DefaultAzureCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id of user to authenticate through DefaultAzureCredential + An updated DefaultAzureCredentialBuilder is returned. +``` + +### azure.identity.DeviceCodeCredential + +Superclass: azure.core.credential.TokenCredential + +```text +DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application +``` + +#### azure.identity.DeviceCodeCredential.DeviceCodeCredential + +```text +DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application +``` + +#### azure.identity.DeviceCodeCredential.authenticate + +```text +AUTHENTICATE Authenticates a user via the device code flow + Can take a azure.core.credential.TokenRequestContext as an optional argument. + Returns a reactor.core.publisher.Mono as a azure.identity.AuthenticationRecord. +``` + +### azure.identity.DeviceCodeCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential. + + The DeviceCodeCredentialBuilder constructor in MATLAB always applies + disableAutomaticAuthentication to avoid any automatic authentication + attempts by clients during which MATLAB will not be able to display the + device code. If a client requires authentication for a certain scope and + your DeviceCodeCredential has not been authenticated for this (yet), an + error will be thrown. + + See: + https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication() +``` + +#### azure.identity.DeviceCodeCredentialBuilder.DeviceCodeCredentialBuilder + +```text +DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential. + + The DeviceCodeCredentialBuilder constructor in MATLAB always applies + disableAutomaticAuthentication to avoid any automatic authentication + attempts by clients during which MATLAB will not be able to display the + device code. If a client requires authentication for a certain scope and + your DeviceCodeCredential has not been authenticated for this (yet), an + error will be thrown. + + See: + https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication() +``` + +#### azure.identity.DeviceCodeCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.build + +```text +BUILD Not Supported in MATLAB + + When working with DeviceCodeCredential, MATLAB requires the credential + object to be pre-authorized before passing it to an Azure client. Please + build and also immediately authorize the DeviceCodeCredential using the + 'buildAndAuthenticate' method instead. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate + +```text +BUILDANDAUTHENTICATE Creates new DeviceCodeCredential with the configured + options set and also immediately authenticates it with the requested + tokenRequestContext. + + By default this method will print the device code information: + + To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code ILOVEMATLAB to authenticate. + + To the MATLAB Command Window. Optionally a function handle + challengeConsumer can be provided to customize the message or how to + display it. This function will be called with a DeviceCodeInfo object as + input. + + An authenticated DeviceCodeCredential is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication + +```text +DISABLEAUTOMATICAUTHENTICATION Disables the automatic authentication and + prevents the DeviceCodeCredential from automatically prompting the user. + If automatic authentication is disabled a AuthenticationRequiredException + will be thrown from getToken(TokenRequestContext request) in the case + that user interaction is necessary. + + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.maxRetry + +```text +MAXRETRY Sets max number of retries when an authentication request fails + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through DeviceCodeCredential + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions + +```text +TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +``` + +### azure.identity.DeviceCodeInfo + +Superclass: azure.object + +```text +DEVICECODEINFO Contains details of a device code request. +``` + +#### azure.identity.DeviceCodeInfo.DeviceCodeInfo + +```text +DEVICECODEINFO Contains details of a device code request. +``` + +#### azure.identity.DeviceCodeInfo.getExpiresOn + +```text +GETEXPIRESON Gets the expiration time of device code. + Returns a datetime object. +``` + +#### azure.identity.DeviceCodeInfo.getMessage + +```text +GETMESSAGE Gets the message which should be displayed to the user. + Returns a character vector. +``` + +#### azure.identity.DeviceCodeInfo.getUserCode + +```text +GETUSERCODE Gets the code which user needs to provide when authenticating + at the verification URL. + Returns a character vector. +``` + +#### azure.identity.DeviceCodeInfo.getVerificationUrl + +```text +GETVERIFICATIONURL Gets the URL where user can authenticate. + Returns a character vector. +``` + +### azure.identity.EnvironmentCredential + +Superclass: azure.core.credential.TokenCredential + +```text +ENVIRONMENTCREDENTIAL Provides token credentials based on environment variables + The environment variables expected are: + AZURE_CLIENT_ID + AZURE_CLIENT_SECRET + AZURE_TENANT_ID + or: + AZURE_CLIENT_ID + AZURE_CLIENT_CERTIFICATE_PATH + AZURE_TENANT_ID + or: + AZURE_CLIENT_ID + AZURE_USERNAME + AZURE_PASSWORD +``` + +#### azure.identity.EnvironmentCredential.EnvironmentCredential + +```text +Created using a EnvironmentCredential java object from the + EnvironmentCredential class only +``` + +### azure.identity.EnvironmentCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder +``` + +#### azure.identity.EnvironmentCredentialBuilder.EnvironmentCredentialBuilder + +```text +ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder +``` + +#### azure.identity.EnvironmentCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated EnvironmentCredentialBuilder is returned. +``` + +#### azure.identity.EnvironmentCredentialBuilder.build + +```text +BUILD Creates new EnvironmentCredential with the configured options set +``` + +### azure.identity.InteractiveBrowserCredential + +Superclass: azure.core.credential.TokenCredential + +```text +INTERACTIVEBROWSERCREDENTIAL Prompt the login in the default browser + An AAD credential that acquires a token for an AAD application by prompting + the login in the default browser. + The oauth2 flow will notify the credential of the authentication code through + the reply URL. + The application to authenticate to must have delegated user login permissions + and have http://localhost:{port} listed as a valid reply URL. +``` + +#### azure.identity.InteractiveBrowserCredential.InteractiveBrowserCredential + +```text +Created using a EnvironmentCredential java object from the + EnvironmentCredential class only +``` + +### azure.identity.InteractiveBrowserCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.InteractiveBrowserCredentialBuilder + +```text +INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.build + +```text +BUILD Creates new InteractiveBrowserCredential with the configured options set +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl + +```text +REDIRECTURL Sets Redirect URL for application with the security code callback +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id of user to authenticate through InteractiveBrowserCredential + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions + +```text +tokenCachePersistenceOptions Sets tokenCachePersistenceOptions. +``` + +### azure.identity.ManagedIdentityCredential + +Superclass: azure.core.credential.TokenCredential + +```text +MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials +``` + +#### azure.identity.ManagedIdentityCredential.ManagedIdentityCredential + +```text +MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials +``` + +#### azure.identity.ManagedIdentityCredential.getClientId + +```text +GETCLIENTID Gets the client ID of user assigned or system assigned identity + The client ID is returned as a character vector. +``` + +### azure.identity.ManagedIdentityCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.ManagedIdentityCredentialBuilder + +```text +MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.build + +```text +BUILD Creates new ManagedIdentityCredential with the configured options set +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated ManagedIdentityCredentialBuilder is returned. +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.maxRetry + +```text +MAXRETRY Sets max number of retries when an authentication request fails +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.resourceId + +```text +RESOURCEID Sets client id + An updated ManagedIdentityCredentialBuilder is returned. +``` + +### azure.identity.SharedTokenCacheCredential + +Superclass: azure.core.credential.TokenCredential + +```text +DEVICECODECREDENTIAL A credential provider that provides token + credentials from the MSAL shared token cache. +``` + +#### azure.identity.SharedTokenCacheCredential.SharedTokenCacheCredential + +```text +DEVICECODECREDENTIAL A credential provider that provides token + credentials from the MSAL shared token cache. +``` + +#### azure.identity.SharedTokenCacheCredential.restFlow + +```text +azure.identity.SharedTokenCacheCredential.restFlow is an undocumented builtin static method or namespace function. +``` + +#### azure.identity.SharedTokenCacheCredential.restGetSas + +```text +azure.identity.SharedTokenCacheCredential.restGetSas is an undocumented builtin static method or namespace function. +``` + +### azure.identity.SharedTokenCacheCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.SharedTokenCacheCredentialBuilder + +```text +SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.build + +```text +BUILD Creates new SharedTokenCacheCredential with the configured options set +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through SharedTokenCacheCredential + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions + +```text +TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +``` + +### azure.identity.TokenCachePersistenceOptions + +Superclass: azure.object + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.identity.TokenCachePersistenceOptions.TokenCachePersistenceOptions + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.identity.TokenCachePersistenceOptions.getName + +```text +GETNAME Get the name. + Returns a character vector. +``` + +#### azure.identity.TokenCachePersistenceOptions.setName + +```text +SETNAME Set the name. + Returns an updated azure.core.identity.TokenCachePersistenceOptions. +``` + +### azure.mathworks + +### azure.mathworks.internal + +### azure.mathworks.internal.compareAuthEnvVars + +```text +COMPAREAUTHENVVARS Checks matching Java & MATLAB authentication env. variables + This is a useful sanity check that variables exist in both contexts. + The following variables are tested: + AZURE_CLIENT_ID + AZURE_CLIENT_SECRET + AZURE_TENANT_ID + AZURE_CLIENT_CERTIFICATE_PATH + AZURE_USERNAME + AZURE_PASSWORD + + A variable no set in either context does not return a false. + A logical is returned. +``` + +### azure.mathworks.internal.datetime2OffsetDateTime + +```text +DATETIME2OFFSETDATETIME Converts a MATLAB datetime to a Java + OffsetDateTime in UTC. Ideally the input MATLAB datetime has a specific + timezone set already. If no timezone is set, local is assumed. +``` + +### azure.mathworks.internal.int64FnHandler + +```text +int64FnHandler Invokes Java method to convert a Java long to a string and then an int64 + An int64 is returned. +``` + +### azure.security + +### azure.security.keyvault + +### azure.security.keyvault.keys + +### azure.security.keyvault.keys.models + +### azure.security.keyvault.keys.models.DeletedKey + +Superclass: azure.security.keyvault.keys.models.KeyVaultKey + +```text +DELETEDKEY Deleted Key is the resource consisting of name, recovery + id, deleted date, scheduled purge date and its attributes inherited + from KeyVaultKey. It is managed by Key Service. + + DeletedKey follows the Azure KeyVault Java SDK design, meaning that + DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like + getKey and getName. It appears however that some of those methods do + not actually return a value for deleted keys and it even appears to + depend on how the DeletedKey was obtained. A DeletedKey obtained + through getDeletedKey *does* appear to return a name when calling + getName whereas DeletedKey obtained through listDeletedKeys does + *not*. These are all behaviors of the underlying Azure KeyVault Java + SDK and not MATLAB specific behaviors. + + In that sense, to determine the name of a deleted key, it appears the + best option is to call getRecoveryId and parse the name from the URI + this returns. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.DeletedKey + +```text +DELETEDKEY Deleted Key is the resource consisting of name, recovery + id, deleted date, scheduled purge date and its attributes inherited + from KeyVaultKey. It is managed by Key Service. + + DeletedKey follows the Azure KeyVault Java SDK design, meaning that + DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like + getKey and getName. It appears however that some of those methods do + not actually return a value for deleted keys and it even appears to + depend on how the DeletedKey was obtained. A DeletedKey obtained + through getDeletedKey *does* appear to return a name when calling + getName whereas DeletedKey obtained through listDeletedKeys does + *not*. These are all behaviors of the underlying Azure KeyVault Java + SDK and not MATLAB specific behaviors. + + In that sense, to determine the name of a deleted key, it appears the + best option is to call getRecoveryId and parse the name from the URI + this returns. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getDeletedOn + +```text +GETDELETEDON Get the deleted UTC time. + A datetime object is returned. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getRecoveryId + +```text +GETRECOVERYID Get the recoveryId identifier. + The URI is returned as character array. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate + +```text +GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. + A datetime object is returned. +``` + +### azure.security.keyvault.keys.models.JsonWebKey + +Superclass: azure.object + +```text +JSONWEBKEY Key as per http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18 + This can be used an intermediate format for converting to other key types or + for extracting elements of a key. + + Example: + key = keyClient.getKey('myKeyName'); + % Return as a jsonWebKey and test if valid + jsonWebKey = key.getKey(); + tf = jsonWebKey.isValid); + % Convert to an RSA key + keyRsa = jsonWebKey.toRsa(false); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.JsonWebKey + +```text +Create a logger object +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.clearMemory + +```text +CLEARMEMORY Clears key materials in the underlying Java SDK +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.getId + +```text +GETID Get the kid value + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.getKeyType + +```text +GETKEYTYPE Get the kty value + A azure.security.keyvault.keys.models.KeyType is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey + +```text +HASPRIVATEKEY Verifies whether the JsonWebKey has a private key or not + A logical is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.isValid + +```text +ISVALID Verifies whether the JsonWebKey is valid + A logical is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toAes + +```text +TOAES Converts JSON web key to AES key + A key of type javax.crypto.SecretKey is returned. + + Example: + key = keyClient.getKey('myKeyName'); + jsonWebKey = key.getKey(); + keyAes = jsonWebKey.toAes(); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toEc + +```text +TOEC Converts JSON web key to EC key pair & optionally include the private key + Include private key if includePrivateParameters set to true + A key pair of type java.security.KeyPair is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toRsa + +```text +TORSA Converts JSON web key to RSA key pair + Include private key if includePrivateParameters set to true + A key pair of type java.security.KeyPair is returned. + + Example: + key = keyClient.getKey('myKeyName'); + % Return as a jsonWebKey + jsonWebKey = key.getKey(); + % Convert to an RSA key + keyRsa = jsonWebKey.toRsa(false); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toString + +```text +TOSTRING Return as a character vector +``` + +### azure.security.keyvault.keys.models.KeyProperties + +Superclass: azure.object + +```text +KEYPROPERTIES Contains the properties of the secret except its value + + Example + keyClient = createKeyVaultClient('Type','Key'); + propList = keyClient.listPropertiesOfKeys(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.keys.models.KeyProperties.KeyProperties + +```text +KEYPROPERTIES Contains the properties of the secret except its value + + Example + keyClient = createKeyVaultClient('Type','Key'); + propList = keyClient.listPropertiesOfKeys(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getId + +```text +GETID Get the secret identifier + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getKeyId + +```text +GETKEYID Get the keyId identifier + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getName + +```text +GETNAME Get the key name + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getVersion + +```text +GETVERSION Get the key version + A character vector is returned. +``` + +### azure.security.keyvault.keys.models.KeyType + +```text +KEYTYPE Defines enumeration values for KeyType + Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM +``` + +```text +Enumeration values: + EC + EC_HSM + OCT + OCT_HSM + RSA + RSA_HSM + +``` + +#### azure.security.keyvault.keys.models.KeyType.KeyType + +```text +KEYTYPE Defines enumeration values for KeyType + Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM +``` + +#### azure.security.keyvault.keys.models.KeyType.fromString + +```text +FROMSTRING Creates or finds a KeyType from its string representation + A azure.security.keyvault.keys.models.KeyType is returned. + Input may be a character vector or scalar string. + Input is not case sensitive. + Accepted values are: EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM. + This is a static method. +``` + +#### azure.security.keyvault.keys.models.KeyType.toJava + +```text +TOJAVA Converts to a com.azure.security.keyvault.keys.models.KeyType Java object +``` + +#### azure.security.keyvault.keys.models.KeyType.toString + +```text +TOSTRING Returns text form of a azure.security.keyvault.keys.models.KeyType + A character vector is returned. +``` + +### azure.security.keyvault.keys.models.KeyVaultKey + +Superclass: azure.object + +```text +KEYVAULTSECRET KeyVaultKey class + Creates a azure.security.keyvault.keys.models.KeyVaultKey object. + A com.azure.security.keyvault.keys.models.KeyVaultKey java object is a required + input argument. A number of methods return KeyVaultKey objects. + + Example + % Get a KeyVaultKey object + key = keyClient.getKey('myKeyName'); + keyType = key.getKeyType(); + jsonWebKey = key.getKey(); +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.KeyVaultKey + +```text +Create a logger object +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getId + +```text +GETID Returns the ID value of the key + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getKey + +```text +GETKEY Get the public part of the latest version of the key + A azure.security.keyvault.keys.models.JsonWebKey is returned + + Example: + jsonWebKey = key.getKey(); +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getKeyType + +```text +GETKEYTYPE Returns the type of a key + Returns a azure.security.keyvault.keys.models.KeyType +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getName + +```text +GETNAME Returns the key name + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getProperties + +```text +GETPROPERTIES Get the key properties + A azure.security.keyvault.keys.models.KeyProperties is returned. +``` + +### azure.security.keyvault.keys.KeyClient + +Superclass: azure.object + +```text +KEYCLIENT A KeyClient object for transacting keys with the Key Vault + + Example: + % Create a client using the createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials + keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + keyClient = createKeyVaultClient('Type','Key'); + + Or + + % Alternatively a client can also be created manually to + % Configure the logger level and message prefix if not already configured + initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Create a client builder object, a KeyClient in this case + builder = azure.security.keyvault.keys.KeyClientBuilder(); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + keyClient = builder.buildClient(); +``` + +#### azure.security.keyvault.keys.KeyClient.KeyClient + +```text +KEYCLIENT A KeyClient object for transacting keys with the Key Vault + + Example: + % Create a client using the createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials + keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + keyClient = createKeyVaultClient('Type','Key'); + + Or + + % Alternatively a client can also be created manually to + % Configure the logger level and message prefix if not already configured + initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Create a client builder object, a KeyClient in this case + builder = azure.security.keyvault.keys.KeyClientBuilder(); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + keyClient = builder.buildClient(); +``` + +#### azure.security.keyvault.keys.KeyClient.beginDeleteKey + +```text +BEGINDELETESECRET Deletes a key by name from Key Vault + A azure.core.util.polling.syncPoller is returned. + For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller + keyName can be provided as a scalar character vector or string. + + Example: + key = keyClient.getKey('myKeyName'); + syncPoller = keyClient.beginDeleteKey('myKeyName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available, e.g. cancelOperation() +``` + +#### azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey + +```text +BEGINRECOVERDELETEDKEY Recovers the deleted key in the key vault to its + latest version and can only be performed on a soft-delete enabled vault. + A azure.core.util.polling.syncPoller is returned. + For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller + keyName can be provided as a scalar character vector or string. + + Example: + syncPoller = keyClient.beginRecoverDeletedKey('myKeyName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available, e.g. cancelOperation() +``` + +#### azure.security.keyvault.keys.KeyClient.createKey + +```text +CREATEKEY Creates a new key and stores it in the key vault + A key name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.KeyType is provided as an argument + to indicate which type of key to create. + An azure.security.keyvault.keys.models.KeyVaultKey is returned. + + Example: + % Create a client + keyClient = createKeyVaultClient('Type','Key'); + % Create a key type, in this case RSA + rsaKeyType = azure.security.keyvault.keys.models.KeyType.RSA; + % Create the key + key = KeyClient.createKey('myKeyName', rsaKeyType); +``` + +#### azure.security.keyvault.keys.KeyClient.getDeletedKey + +```text +GETDELETEDKEY Gets the public part of a deleted key. + The name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.DeletedKey is returned. + + Example: + key = keyClient.getDeletedKey('myKeyName'); +``` + +#### azure.security.keyvault.keys.KeyClient.getKey + +```text +GETKEY Get the public part of the latest version of the specified key + The name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.KeyVaultKey is returned. + + Example: + key = keyClient.getKey('myKeyName'); +``` + +#### azure.security.keyvault.keys.KeyClient.getVaultUrl + +```text +GETVAULTURL Gets the vault endpoint url to which service requests are sent to + A character vector is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +#### azure.security.keyvault.keys.KeyClient.listDeletedKeys + +```text +LISTDELETEDKEYS Lists deleted keys of the key vault. + Properties are returned as an array of + azure.security.keyvault.keys.models.DeletedKey objects. + If there are no keys an empty array is returned. + + Example + % Get a list the key properties + deletedKeys = keyClient.listDeletedKeys(); +``` + +#### azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys + +```text +LISTPROPERTIESOFKEYS Lists keys in the key vault + Properties are returned as an array of + azure.security.keyvault.keys.models.KeyProperties objects. + If there are no keys an empty array is returned. + + Example + % Get a list the key properties + keyProperties = keyClient.listPropertiesOfKeys(); + % Look at some of the data returned i.e. the key name + propList(1).getName(); +``` + +#### azure.security.keyvault.keys.KeyClient.purgeDeletedKey + +```text +PURGEDELETEDKEY Permanently deletes the specified key without the + possibility of recovery. The Purge Deleted Key operation is applicable + for soft-delete enabled vaults. This operation requires the keys/purge + permission. + The name argument is provided as a character vector or scalar string. + The function throws an error if no deleted key can be found. Returns + nothing upon success. + + Example: + keyClient.purgeDeletedKey('myKeyName'); +``` + +### azure.security.keyvault.keys.KeyClientBuilder + +Superclass: azure.object + +```text +KEYCLIENTBUILDER Builder for KeyClient object + Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder + object as an argument to create a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.KeyClientBuilder + +```text +KEYCLIENTBUILDER Builder for KeyClient object + Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder + object as an argument to create a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.buildClient + +```text +BUILDCLIENT Creates a KeyClient based on options configured in the builder +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.credential + +```text +CREDENTIAL Sets the credentials used to authorize a client's requests + An updated builder object is returned. + + Example: + configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); + credentials = configureCredentials(configFilePath); + builder = builder.credential(credentials); +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. Other options may be added + in the future. An updated builder object is returned. + This method will apply http proxy settings if defined in MATLAB Web preferences. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.vaultUrl + +```text +VAULTURL Sets the vault URL to send HTTP requests to + vaultUrl should be of type character vector or scalar string. + An updated builder object is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +### azure.security.keyvault.secrets + +### azure.security.keyvault.secrets.models + +### azure.security.keyvault.secrets.models.DeletedSecret + +Superclass: azure.security.keyvault.secrets.models.KeyVaultSecret + +```text +DELETEDSECRET Deleted Secret is the resource consisting of name, + recovery id, deleted date, scheduled purge date and its attributes + inherited from KeyVaultSecret. It is managed by Secret Service. + + DeletedSecret follows the Azure KeyVault Java SDK design, meaning + that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret + methods like getValue. It appears however that this method does not + actually return a value for deleted secrets. These are all behaviors + of the underlying Azure KeyVault Java SDK and not MATLAB specific + behaviors. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.DeletedSecret + +```text +DELETEDSECRET Deleted Secret is the resource consisting of name, + recovery id, deleted date, scheduled purge date and its attributes + inherited from KeyVaultSecret. It is managed by Secret Service. + + DeletedSecret follows the Azure KeyVault Java SDK design, meaning + that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret + methods like getValue. It appears however that this method does not + actually return a value for deleted secrets. These are all behaviors + of the underlying Azure KeyVault Java SDK and not MATLAB specific + behaviors. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn + +```text +GETDELETEDON Get the deleted UTC time. + A datetime object is returned. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId + +```text +GETRECOVERYID Get the recoveryId identifier. + The URI is returned as character array. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate + +```text +GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. + A datetime object is returned. +``` + +### azure.security.keyvault.secrets.models.KeyVaultSecret + +Superclass: azure.object + +```text +KEYVAULTSECRET Class to provide access to the KeyVaultSecret object + Creates a azure.security.keyvault.secrets.models.KeyVaultSecret object. + A KeyVaultSecret can be created from a name and value or an equivalent Java + object. A number of methods return KeyVaultSecret objects. + + + Example + % Get a KeyVaultSecret object + secret = secretClient.getSecret('mySecretName'); + value = secret.getValue(); + + Or + + secret = azure.security.keyvault.secrets.models.KeyVaultSecret(secretName, secretValue); + + Or + + secret = azure.security.keyvault.secrets.models.KeyVaultSecret(javaKeyVaultSecret); +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.KeyVaultSecret + +```text +Create a logger object +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getId + +```text +GETID Returns the ID value of the secret + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getName + +```text +GETNAME Returns the name of the secret + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties + +```text +GETPROPERTIES Get the secret properties + A azure.security.keyvault.secrets.models.SecretProperties is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getValue + +```text +GETVALUE Returns the secret value + A character vector is returned. + + Example: + sc = createKeyVaultClient('Type','Secret'); + secret = sc.getSecret('mySecretName'); + secretValue = secret.getValue(); +``` + +### azure.security.keyvault.secrets.models.SecretProperties + +Superclass: azure.object + +```text +SECRETPROPERTIES Contains the properties of the secret but not its value + + Example: + secretClient = createKeyVaultClient('Type','Secret'); + propList = secretClient.listPropertiesOfSecrets(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.SecretProperties + +```text +SECRETPROPERTIES Contains the properties of the secret but not its value + + Example: + secretClient = createKeyVaultClient('Type','Secret'); + propList = secretClient.listPropertiesOfSecrets(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getId + +```text +GETID Get the secret identifier + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getKeyId + +```text +GETKEYID Get the keyId identifier + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getName + +```text +GETNAME Get the secret name + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getVersion + +```text +GETVERSION Get the keyId identifier + A character vector is returned. +``` + +### azure.security.keyvault.secrets.SecretClient + +Superclass: azure.object + +```text +SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault + + Example + % Create a Secret client using the higher-level createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials: + secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + secretClient = createKeyVaultClient('Type','Secret'); + + Or + + % Alternatively a client can also be created manually using the builder for + % this class: + % Create a client builder object, a SecretClient in this case + builder = azure.security.keyvault.secrets.SecretClientBuilder(); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + secretClient = builder.buildClient(); +``` + +#### azure.security.keyvault.secrets.SecretClient.SecretClient + +```text +SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault + + Example + % Create a Secret client using the higher-level createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials: + secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + secretClient = createKeyVaultClient('Type','Secret'); + + Or + + % Alternatively a client can also be created manually using the builder for + % this class: + % Create a client builder object, a SecretClient in this case + builder = azure.security.keyvault.secrets.SecretClientBuilder(); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + secretClient = builder.buildClient(); +``` + +#### azure.security.keyvault.secrets.SecretClient.beginDeleteSecret + +```text +BEGINDELETESECRET Deletes a secret by name from Key Vault + A azure.core.util.polling.syncPoller is returned. + keyName can be provided as a scalar character vector or string. + + Example: + secret = secretClient.getSecret('mySecretName'); + syncPoller = secretClient.beginDeleteSecret('mySecretName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available +``` + +#### azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret + +```text +BEGINRECOVERDELETEDSECRET Recovers the deleted secret in the key vault to + its latest version. Can only be performed on a soft-delete enabled vault. + This operation requires the secrets/recover permission. + A azure.core.util.polling.syncPoller is returned. + secretName can be provided as a scalar character vector or string. + + Example: + syncPoller = secretClient.beginRecoverDeletedSecret('myDeletedSecretName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available +``` + +#### azure.security.keyvault.secrets.SecretClient.getDeletedSecret + +```text +GETDELETEDSECRET Gets a secret that has been deleted for a soft-delete enabled key vault. + The name can be provided as a scalar character vector or string. + An exception is thrown is a secret does not exist otherwise a + azure.security.keyvault.secrets.models.DeletedSecret is returned. + + Example + deletedSecret = secretClient.getDeletedSecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.getSecret + +```text +GETSECRETS Returns the secret value of the specific secret by name + The name can be provided as a scalar character vector or string. + An exception is thrown is a secret does not exist otherwise a + azure.security.keyvault.secrets.models.KeyVaultSecret is returned. + + Example + secret = secretClient.getsecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.getVaultUrl + +```text +GETVAULTURL Gets the vault endpoint url to which service requests are sent to + A character vector is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +#### azure.security.keyvault.secrets.SecretClient.listDeletedSecrets + +```text +LISTDELETEDSECRETS Lists deleted secrets of the key vault if it has + enabled soft-delete. This operation requires the secrets/list permission. + Properties are returned as an array of + azure.security.keyvault.secrets.models.DeletedSecret objects. + If there are no secrets an empty array is returned. + + Example: + % Get a list of the deleted secrets + deletedSecrets = secretClient.listDeletedSecrets(); + % Look at some of the data returned i.e. the secret name + deletedSecrets(1).getName(); +``` + +#### azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets + +```text +LISTPROPERTIESOFSECRETS Lists secrets in the key vault + Properties are returned as an array of + azure.security.keyvault.secrets.models.SecretProperties objects. + If there are no secrets an empty array is returned. + + Example: + % Get a list the secret properties + secretProperties = secretClient.listPropertiesOfSecrets(); + % Look at some of the data returned i.e. the secret name + propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret + +```text +PURGEDELETEDSECRET Permanently removes a deleted secret, without the + possibility of recovery. This operation can only be performed on a + soft-delete enabled vault. This operation requires the secrets/purge + permission. + + Throws an error on failure, does not return anything at all upon success. + + Example + secretClient.purgeDeletedSecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.setSecret + +```text +SETSECRETS Creates a secrets using a name and value + This method returns an azure.security.keyvault.secrets.KeyVaultSecret + object. secretName and secretValue can be provided as character vectors or + scalar strings. + + Example: + % Create a SecretClient object + sc = createKeyVaultClient('Type','Secret'); + % Set the secret name and its value to Azure KeyVault + keyVaultSecret = sc.setSecret(secretName, secretValue); +``` + +### azure.security.keyvault.secrets.SecretClientBuilder + +Superclass: azure.object + +```text +SECRETCLIENTBUILDER builder for SecretClient + Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder + object as an argument to build a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.SecretClientBuilder + +```text +SECRETCLIENTBUILDER builder for SecretClient + Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder + object as an argument to build a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.buildClient + +```text +BUILDCLIENT Creates a SecretClient based on options configured in the builder +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.credential + +```text +CREDENTIAL Sets the credentials used to authorize a client's requests + An updated builder object is returned. + + Example: + configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); + credentials = configureCredentials(configFilePath); + builder = builder.credential(credentials); +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. Other options may be added + in the future. An updated builder object is returned. + This method will apply http proxy settings if defined in MATLAB Web preferences. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl + +```text +VAULTURL Sets the vault URL to send HTTP requests to + The vaultUrl should be of type character vector or scalar string. + An updated builder object is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +### azure.storage + +### azure.storage.blob + +### azure.storage.blob.models + +### azure.storage.blob.models.BlobContainerItem + +Superclass: azure.object + +```text +BLOBCONTAINERITEM An Azure Storage container +``` + +#### azure.storage.blob.models.BlobContainerItem.BlobContainerItem + +```text +BLOBCONTAINERITEM An Azure Storage container +``` + +#### azure.storage.blob.models.BlobContainerItem.getName + +```text +GETNAME Returns the container's name as a character vector +``` + +### azure.storage.blob.models.BlobItem + +Superclass: azure.object + +```text +BlobItem +``` + +#### azure.storage.blob.models.BlobItem.BlobItem + +```text +BlobItem +``` + +#### azure.storage.blob.models.BlobItem.getMetadata + +```text +GETMETADATA Get the metadata property +``` + +#### azure.storage.blob.models.BlobItem.getName + +```text +GETNAME Returns the blob's name as a character vector +``` + +#### azure.storage.blob.models.BlobItem.getProperties + +```text +GETPROPERTIES Get the properties property +``` + +#### azure.storage.blob.models.BlobItem.getSnapshot + +```text +GETSNAPSHOT Returns the blob's snapshot property as a character vector +``` + +#### azure.storage.blob.models.BlobItem.getTags + +```text +GETTAGS Get the tags property +``` + +#### azure.storage.blob.models.BlobItem.getVersionId + +```text +GETVERSIONID Returns the blob's versionId property as a character vector +``` + +#### azure.storage.blob.models.BlobItem.isDeleted + +```text +isDeleted Get the deleted property, returns a logical +``` + +#### azure.storage.blob.models.BlobItem.isPrefix + +```text +ISPREFIX Get the isPrefix property: If blobs are named to mimic a directory hierarchy +``` + +### azure.storage.blob.models.BlobItemProperties + +Superclass: azure.object + +```text +BlobItemProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobItemProperties.BlobItemProperties + +```text +BlobItemProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobItemProperties.getCacheControl + +```text +GETCACHECONTROL Get the cacheControl property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentEncoding + +```text +GETCONTENTENCODING Get the getContentEncoding property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentLanguage + +```text +GETCONTENTLANGUAGE Get the getContentLanguage property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentLength + +```text +GETCONTENTLENGTH Get the contentType property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentMd5 + +```text +GETCONTENTMD5 Get the getContentMd5 property + Return the base64 value shown in the Azure portal +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentType + +```text +GETCONTENTTYPE Get the getContentType property +``` + +### azure.storage.blob.models.BlobListDetails + +Superclass: azure.object + +```text +BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs +``` + +#### azure.storage.blob.models.BlobListDetails.BlobListDetails + +```text +BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveCopy + +```text +GETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs + +```text +GETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions + +```text +GETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy + +```text +GETRETRIEVEIMMUTABILITYPOLICY Whether immutability policy for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold + +```text +GETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveMetadata + +```text +GETRETRIEVEMETADATA Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots + +```text +GETRETRIEVESNAPSHOTS Whether snapshots should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveTags + +```text +GETRETRIEVETAGS Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs + +```text +GETRETRIEVEUNCOMMITTEDBLOBS Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveVersions + +```text +GETRETRIEVEVERSIONS Whether versions should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveCopy + +```text +SETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs + +```text +SETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions + +```text +SETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy + +```text +SETRETRIEVEIMMUTABILITYPOLICY Whether blobs which have been deleted with versioning should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold + +```text +SETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveMetadata + +```text +SETRETRIEVEMETADATA Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots + +```text +setRetrieveSnapshots Whether snapshots should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveTags + +```text +setRetrieveTags Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs + +```text +SETRETRIEVEUNCOMMITTEDBLOBS Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveVersions + +```text +SETRETRIEVEUNCOMMITTEDBLOBS Whether versions should be returned +``` + +### azure.storage.blob.models.BlobProperties + +Superclass: azure.object + +```text +BlobProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobProperties.BlobProperties + +```text +BlobProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobProperties.getBlobSize + +```text +GETBLOBSIZE Gets the size of the blob in bytes + An int64 is returned. +``` + +#### azure.storage.blob.models.BlobProperties.getCacheControl + +```text +GETCACHECONTROL Get the the cache control of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentEncoding + +```text +GETCONTENTENCODING Get the content encoding of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentLanguage + +```text +GETCONTENTLANGUAGE Get the content language of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentMd5 + +```text +GETCONTENTMD5 Get the MD5 of the blob's content + Return the base64 value shown in the Azure portal +``` + +#### azure.storage.blob.models.BlobProperties.getContentType + +```text +GETCONTENTTYPE Get the content type of the blob +``` + +### azure.storage.blob.models.ListBlobsOptions + +Superclass: azure.object + +```text +LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient +``` + +#### azure.storage.blob.models.ListBlobsOptions.ListBlobsOptions + +```text +LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient +``` + +#### azure.storage.blob.models.ListBlobsOptions.getDetails + +```text +GETDETAILS Returns a BlobListDetails object +``` + +#### azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage + +```text +GETDETAILS Returns the maximum number of blobs to return, including all BlobPrefix elements + A double is returned. + An empty [] is returned if not set. +``` + +#### azure.storage.blob.models.ListBlobsOptions.getPrefix + +```text +GETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +``` + +#### azure.storage.blob.models.ListBlobsOptions.setDetails + +```text +SETDETAILS Returns a ListBlobsOptions object +``` + +#### azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage + +```text +SETDETAILS Returns a ListBlobsOptions object +``` + +#### azure.storage.blob.models.ListBlobsOptions.setPrefix + +```text +SETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +``` + +### azure.storage.blob.models.StorageAccountInfo + +Superclass: azure.object + +```text +STORAGEACCOUNTINFO Holds information related to the storage account + Currently only constructing an object based on and existing java object of + type StorageAccountInfo is supported. +``` + +#### azure.storage.blob.models.StorageAccountInfo.StorageAccountInfo + +```text +STORAGEACCOUNTINFO Holds information related to the storage account + Currently only constructing an object based on and existing java object of + type StorageAccountInfo is supported. +``` + +#### azure.storage.blob.models.StorageAccountInfo.getAccountKind + +```text +GETACCOUNTKIND Describes the type of the storage account + Values: BLOB_STORAGE, BLOCK_BLOB_STORAGE, FILE_STORAGE, STORAGE, STORAGE_V2 + A character vector is returned rather than an enumeration +``` + +### azure.storage.blob.models.UserDelegationKey + +Superclass: azure.object + +```text +USERDELEGATIONKEY A user delegation key. +``` + +#### azure.storage.blob.models.UserDelegationKey.UserDelegationKey + +```text +USERDELEGATIONKEY A user delegation key. +``` + +#### azure.storage.blob.models.UserDelegationKey.getSignedExpiry + +```text +GETSIGNEDEXPIRY Get the signedExpiry property: The date-time + the key expires. +``` + +#### azure.storage.blob.models.UserDelegationKey.getSignedStart + +```text +GETSIGNEDSTART Get the signedStart property: The date-time the + key is active. +``` + +### azure.storage.blob.sas + +### azure.storage.blob.sas.BlobContainerSasPermission + +Superclass: azure.object + +```text +BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.BlobContainerSasPermission + +```text +BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.parse + +```text +PARSE Creates a BlobContainerSasPermission from the specified permissions string + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, c, w, or d. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setListPermission + +```text +SETLISTPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.blob.sas.BlobSasPermission + +Superclass: azure.object + +```text +BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobSasPermission.BlobSasPermission + +```text +BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.parse + +```text +PARSE Creates a BlobSasPermission from the specified permissions string + A azure.storage.blob.sas.BlobSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, c, w, or d. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.blob.sas.BlobServiceSasSignatureValues + +Superclass: azure.object + +```text +BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.blob.sas.BlobSasPermission or + BlobContainerSasPermission +``` + +#### azure.storage.blob.sas.BlobServiceSasSignatureValues.BlobServiceSasSignatureValues + +```text +BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.blob.sas.BlobSasPermission or + BlobContainerSasPermission +``` + +### azure.storage.blob.specialized + +### azure.storage.blob.specialized.BlobLeaseClient + +Superclass: azure.object + +```text +BLOBLEASECLIENT This class provides a client that contains all the + leasing operations for BlobContainerClient and BlobClient. This client + acts as a supplement to those clients and only handles leasing + operations. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.BlobLeaseClient + +```text +BLOBLEASECLIENT This class provides a client that contains all the + leasing operations for BlobContainerClient and BlobClient. This client + acts as a supplement to those clients and only handles leasing + operations. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.acquireLease + +```text +ACQUIRELEASE Acquires a lease for write and delete + operations. The lease duration must be between 15 to 60 + seconds or -1 for an infinite duration. + + Returns the lease ID. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.breakLease + +```text +BREAKLEASE Breaks the previously acquired lease, if it + exists. + + Returns the remaining time in the broken lease in seconds. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.changeLease + +```text +CHANGELEASE Changes the lease ID. + + Returns the new lease ID. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.getLeaseId + +```text +GETLEASEID Get the lease ID for this lease. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl + +```text +GETRESOURCEURL Gets the URL of the lease client. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.releaseLease + +```text +RELEASELEASE Releases the previously acquired lease. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.renewLease + +```text +RENEWLEASE Renews the previously acquired lease. + + Returns the renewed lease ID. +``` + +### azure.storage.blob.specialized.BlobLeaseClientBuilder + +Superclass: azure.object + +```text +BLOBCLIENTBUILDER This class provides a fluent builder API to help aid + the configuration and instantiation of Storage Lease clients. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.BlobLeaseClientBuilder + +```text +BLOBCLIENTBUILDER This class provides a fluent builder API to help aid + the configuration and instantiation of Storage Lease clients. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient + +```text +BLOBCLIENT Configures the builder based on the passed + BlobClient. This will set the HttpPipeline and URL that are + used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobLeaseClient based on the + configurations set in the builder. + + Returns a BlobLeaseClient based on the configurations in this + builder. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient + +```text +CONTAINERCLIENT Configures the builder based on the passed + BlobContainerClient. This will set the HttpPipeline and URL + that are used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId + +```text +CONTAINERCLIENT Configures the builder based on the passed + BlobContainerClient. This will set the HttpPipeline and URL + that are used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +### azure.storage.blob.BlobClient + +Superclass: azure.object + +```text +BLOBCLIENT Client performs generic blob operations +``` + +#### azure.storage.blob.BlobClient.BlobClient + +```text +BLOBCLIENT Client performs generic blob operations +``` + +#### azure.storage.blob.BlobClient.copyFromUrl + +```text +COPYFROMURL Copies the data at the source URL to a blob + The call waits for the copy to complete before returning a response. + A copyId is returned as a character vector it can apply for certain long + running operations. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. +``` + +#### azure.storage.blob.BlobClient.delete + +```text +DELETE BlobClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + Blobs on Azure. To delete the Azure Blob use the deleteBlob + method in MATLAB. +``` + +#### azure.storage.blob.BlobClient.deleteBlob + +```text +DELETEBLOB Deletes the blob - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteBlob. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + client.deleteBlob('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +``` + +#### azure.storage.blob.BlobClient.downloadToFile + +```text +DOWNLOADTOFILE Downloads the entire blob into a file specified by filePath + To overwrite an existing file use a parameter 'overwrite' and a logical true. + By default a file is not overwritten. + + Example: + blobClient.downloadToFile('/mydir/myfile.txt', 'overwrite', true); +``` + +#### azure.storage.blob.BlobClient.exists + +```text +EXISTS Gets if the blob this client represents exists in Azure + A logical is returned if the Container exists indicating if the blob + exists or not. Otherwise an exception is thrown, for example if the + container does not exist. Consider using a container client to check for + the existance of the container first. +``` + +#### azure.storage.blob.BlobClient.generateSas + +```text +GENERATESAS Generates a SAS for the blob + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.generateUserDelegationSas + +```text +GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the + blob using the specified BlobServiceSasSignatureValues and + UserDelegationKey. The UserDelegationKey can be obtained through the + getUserDelegationKey method of a BlobServiceClient. + + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobClient.getBlobUrl + +```text +GETBLOBURL Gets the URL of the blob represented by this client + The URL is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.getContainerClient + +```text +GETCONTAINERCLIENT Gets a client pointing to the parent container. +``` + +#### azure.storage.blob.BlobClient.getProperties + +```text +GETPROPERTIES Returns the blob's metadata and properties +``` + +#### azure.storage.blob.BlobClient.uploadFromFile + +```text +UPLOADFROMFILE Creates a or updates a block blob To overwrite an + existing blob use a parameter 'overwrite' and a logical true. By + default a blob is not overwritten. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + blobClient.uploadFromFile('/mydir/myfile.txt',... + 'overwrite', true,... + 'leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797'); +``` + +### azure.storage.blob.BlobClientBuilder + +Superclass: azure.object + +```text +BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients +``` + +#### azure.storage.blob.BlobClientBuilder.BlobClientBuilder + +```text +BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients +``` + +#### azure.storage.blob.BlobClientBuilder.blobName + +```text +BLOBNAME Sets the name of the blob + blobName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobClient based on options set in the builder + A built BlobClient object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.containerName + +```text +CONTAINERNAME Sets the name of the container that contains the blob + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.setAnonymousAccess + +```text +SETANONYMOUSACCESS Clears the credential used to authorize the request + An updated builder object is returned. +``` + +### azure.storage.blob.BlobContainerClient + +Superclass: azure.object + +```text +BLOBCONTAINERCLIENT Client to a container +``` + +#### azure.storage.blob.BlobContainerClient.BlobContainerClient + +```text +BLOBCONTAINERCLIENT Client to a container +``` + +#### azure.storage.blob.BlobContainerClient.create + +```text +CREATE Creates a new container within a storage account +``` + +#### azure.storage.blob.BlobContainerClient.delete + +```text +DELETE BlobContainerClient destructor - in MATLAB delete is a + reserved method name for the class destructor. This method + does not delete Blob Containers on Azure. To delete the Azure + Blob Container use the deleteContainer method in MATLAB. +``` + +#### azure.storage.blob.BlobContainerClient.deleteContainer + +```text +DELETECONTAINER Deletes the container - this is the equivalent of the + "delete" method in the Azure Java API but because "delete" is a + reserved method name in MATLAB, the method is named DELETECONTAINER. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + client.deleteContainer('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +``` + +#### azure.storage.blob.BlobContainerClient.exists + +```text +EXISTS Tests if the container this client represents exists in Azure + A logical is returned. +``` + +#### azure.storage.blob.BlobContainerClient.generateUserDelegationSas + +```text +GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the + container using the specified BlobServiceSasSignatureValues and + UserDelegationKey. The UserDelegationKey can be obtained through the + getUserDelegationKey method of a BlobServiceClient. + + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobContainerClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getAccountUrl + +```text +GETACCOUNTURL Get associated account URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobClient + +```text +GETBLOBCLIENT Initializes a new BlobClient object + blobName should be a scalar string or character vector. + A BlobClient is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobContainerName + +```text +GETCONTAINERNAME Get the container name + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobContainerUrl + +```text +GETBLOBCONTAINERURL Get associated container URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getServiceClient + +```text +GETSERVICECLIENT Get a client pointing to the account. +``` + +#### azure.storage.blob.BlobContainerClient.listBlobs + +```text +LISTBLOBS Returns a list of blobs in this container + Folder structures are flattened. + An array of BlobItems is returned. +``` + +#### azure.storage.blob.BlobContainerClient.listBlobsByHierarchy + +```text +LISTBLOBSBYHIERARCHY Returns the blobs and directories (prefixes) under the given directory (prefix). + Directories will have BlobItem.isPrefix() set to true. + Blob names are returned in lexicographic order. + An array of BlobItems is returned. +``` + +### azure.storage.blob.BlobContainerClientBuilder + +Superclass: azure.object + +```text +BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients +``` + +#### azure.storage.blob.BlobContainerClientBuilder.BlobContainerClientBuilder + +```text +BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients +``` + +#### azure.storage.blob.BlobContainerClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobContainerClient based on options set in the builder + A built BlobContainerClient object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.containerName + +```text +CONTAINERNAME Sets the name of the container + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.endpoint + +```text +ENDPOINT Sets the blob container endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.blob.BlobServiceClient + +Superclass: azure.object + +```text +BLOBSERVICECLIENT +``` + +#### azure.storage.blob.BlobServiceClient.BlobServiceClient + +```text +BLOBSERVICECLIENT +``` + +#### azure.storage.blob.BlobServiceClient.createBlobContainer + +```text +CREATEBLOBCONTAINER Creates a new container within a storage account + If a container with the same name already exists, the operation fails. + The name of the container to create should be passed as a character vector or + scalar string. + If the container already exists an empty azure.storage.blob.BlobContainerClient + is returned otherwise a non empty azure.storage.blob.BlobContainerClient is + returned. + In verbose logging mode a message is logged. +``` + +#### azure.storage.blob.BlobServiceClient.deleteBlobContainer + +```text +DELETEBLOBCONTAINER Deletes the specified container in the storage account + The name of the container to create should be passed as a character vector or + scalar string. +``` + +#### azure.storage.blob.BlobServiceClient.generateAccountSas + +```text +GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountInfo + +```text +GETACCOUNTINFO Returns the sku name and account kind for the account + A StorageAccountInfo object is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountUrl + +```text +GETACCOUNTURL Get associated account URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getUserDelegationKey + +```text +GETUSERDELEGATIONKEY Gets a user delegation key for use with this + account's blob storage. + + Note: This method call is only valid when using TokenCredential. I.e. not + when working with ConnectionString or StorageSharedKey authentication + approaches. + + The function takes two datetime objects as input, the start and expiry + time of the key's validity. + + Returns a UserDelegationKey object. + + Example: + + key = sc.getUserDelegationKey(datetime('now'),datetime('now')+hours(1)) +``` + +#### azure.storage.blob.BlobServiceClient.listBlobContainers + +```text +LISTBLOBCONTAINERS +``` + +#### azure.storage.blob.BlobServiceClient.setAnonymousAccess + +```text +SETANONYMOUSACCESS Clears the credential used to authorize the request + An updated builder object is returned. +``` + +### azure.storage.blob.BlobServiceClientBuilder + +Superclass: azure.object + +```text +BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients +``` + +#### azure.storage.blob.BlobServiceClientBuilder.BlobServiceClientBuilder + +```text +BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients +``` + +#### azure.storage.blob.BlobServiceClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobServiceClient based on options set in the builder + A built BlobServiceClient object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.endpoint + +```text +ENDPOINT Sets the blob service endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.retryOptions + +```text +RETRYOPTIONS Sets request retry options for all requests made through the client + retryOptions may be either a com.azure.storage.common.policy.RequestRetryOptions + or a azure.storage.common.policy.RequestRetryOptions object. + An updated azure.storage.blob.BlobServiceClientBuilder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.common + +### azure.storage.common.policy + +### azure.storage.common.policy.RequestRetryOptions + +Superclass: azure.object + +```text +REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory + The default constructor azure.storage.common.policy.RequestRetryOptions() returns an + object with retry values: + + retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional + A RetryPolicyType specifying the type of retry pattern + to use, default value is EXPONENTIAL + + maxTries: Optional int32 + Maximum number of attempts an operation will be retried + default is 4 + + tryTimeoutInSeconds: Optional int32 + Specifies the maximum time allowed before a request is + cancelled and assumed failed, default is intmax s + + retryDelayInMs: Optional int64 + Specifies the amount of delay to use before retrying an + operation, default value is 4ms + + maxRetryDelayInMs: Optional int64 + Specifies the maximum delay allowed before retrying an + operation, default value is 120ms + + secondaryHost: Optional character vector or scalar string +``` + +#### azure.storage.common.policy.RequestRetryOptions.RequestRetryOptions + +```text +REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory + The default constructor azure.storage.common.policy.RequestRetryOptions() returns an + object with retry values: + + retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional + A RetryPolicyType specifying the type of retry pattern + to use, default value is EXPONENTIAL + + maxTries: Optional int32 + Maximum number of attempts an operation will be retried + default is 4 + + tryTimeoutInSeconds: Optional int32 + Specifies the maximum time allowed before a request is + cancelled and assumed failed, default is intmax s + + retryDelayInMs: Optional int64 + Specifies the amount of delay to use before retrying an + operation, default value is 4ms + + maxRetryDelayInMs: Optional int64 + Specifies the maximum delay allowed before retrying an + operation, default value is 120ms + + secondaryHost: Optional character vector or scalar string +``` + +### azure.storage.common.policy.RetryPolicyType + +```text +RetryPolicyType Defines holds possible options for retry backoff algorithms + They may be used with RequestRetryOptions. + Values are EXPONENTIAL & FIXED +``` + +```text +Enumeration values: + EXPONENTIAL + FIXED + +``` + +#### azure.storage.common.policy.RetryPolicyType.RetryPolicyType + +```text +RetryPolicyType Defines holds possible options for retry backoff algorithms + They may be used with RequestRetryOptions. + Values are EXPONENTIAL & FIXED +``` + +#### azure.storage.common.policy.RetryPolicyType.toJava + +```text +TOJAVA Converts to a com.azure.storage.common.policy.RetryPolicyType Java object +``` + +#### azure.storage.common.policy.RetryPolicyType.toString + +```text +TOSTRING Returns text form of a RetryPolicyType + A character vector is returned. +``` + +#### azure.storage.common.policy.RetryPolicyType.valueOf + +```text +VALUEOF Returns the enum constant of this type with the specified name +``` + +### azure.storage.common.sas + +### azure.storage.common.sas.AccountSasPermission + +Superclass: azure.object + +```text +ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on an AccountSasSignatureValues + object +``` + +#### azure.storage.common.sas.AccountSasPermission.AccountSasPermission + +```text +ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on an AccountSasSignatureValues + object +``` + +#### azure.storage.common.sas.AccountSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasProcessMessages + +```text +HASPROCESSMESSAGES Returns the process messages permission + This allows the retrieval and deletion of queue messages. + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasUpdatePermission + +```text +HASUPDATEPERMISSION Returns the update permission status + It allows the update of queue message and tables. + This allows the retrieval and deletion of queue messages. + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.parse + +```text +PARSE Creates an AccountSasPermission from the specified permissions string + A azure.storage.common.sas.AccountSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, w, d, l, a, c, u, or p. +``` + +#### azure.storage.common.sas.AccountSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setListPermission + +```text +SETLISTPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setProcessMessages + +```text +SETPROCESSMESSAGES Sets the process messages permission + This allows the retrieval and deletion of queue messages. + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setUpdatePermission + +```text +SETUPDATEPERMISSION Sets the update permission status + This allows the update of queue messages and tables. + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasResourceType + +Superclass: azure.object + +```text +ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that resource type. + Once the required values are set serialize the object with toString for use + as the resources field on an AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasResourceType.AccountSasResourceType + +```text +ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that resource type. + Once the required values are set serialize the object with toString for use + as the resources field on an AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasResourceType.isContainer + +```text +ISCONTAINER Returns true if the resource is a Container otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.isObject + +```text +ISOBJECT Returns true if the resource is an object otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.isService + +```text +ISSERVICE Returns true if the resource is a Service otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.parse + +```text +PARSE Creates an AccountSasResourceType from the specified permissions string + Creates an AccountSasResourceType from the specified resource types string. + Throws an IllegalArgumentException if passed a character that does not + correspond to a valid resource type. + Expected characters are s, c, or o. + A azure.storage.common.sas.AccountSasResourceType object is returned. + resourceTypesString should be of type scalar string or character vector. + This is a static method. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setContainer + +```text +SETCONTAINER Sets the access status for container level APIs + Grants access to Blob Containers, Tables, Queues, and File Shares. + The container argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType object is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setObject + +```text +SETOBJECT Sets the access status for object level APIs + Grants access to Blobs, Table Entities, Queue Messages, Files. + The object argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType object is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setService + +```text +SETSERVICE Sets the access status for service level APIs + The service argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType service is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.toString + +```text +TOSTRING Converts the given permissions to a String + This method is used to serialize an AccountSasResourceType + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasService + +Superclass: azure.object + +```text +ACCOUNTSASSERVICE Construct a string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that service. Once required values are set the object should + be serialized with toString and set as the services field on an + AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasService.AccountSasService + +```text +ACCOUNTSASSERVICE Construct a string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that service. Once required values are set the object should + be serialized with toString and set as the services field on an + AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasService.hasBlobAccess + +```text +HASBLOBACCESS Returns the access status for blob resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasFileAccess + +```text +HASFILEACCESS Returns the access status for file resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasQueueAccess + +```text +HASQUEUEACCESS Returns the access status for queue resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasTableAccess + +```text +HASTABLEACCESS Returns the access status for table resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.parse + +```text +PARSE Creates an AccountSasService from the specified permissions string + A azure.storage.common.sas.AccountSasService object is returned. + servicesString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid service. + Expected characters are b, f, q, or t. + This is a static method. +``` + +#### azure.storage.common.sas.AccountSasService.setBlobAccess + +```text +SETBLOBACCESS Sets the access status for blob resources + The blob argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setFileAccess + +```text +SETFILEACCESS Sets the access status for file resources + The file argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setQueueAccess + +```text +SETQUEUEACCESS Sets the access status for queue resources + The queue argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setTableAccess + +```text +SETTABLEACCESS Sets the access status for table resources + The table argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasSignatureValues + +Superclass: azure.object + +```text +ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + assv = azure.storage.common.sas.AccountSasSignatureValues( ... + expiryTime, permissions, services, resourceTypes); + + Argument types: + expiryTime: datetime + permissions: azure.storage.common.sas.AccountSasPermission + services: azure.storage.common.sas.AccountSasService + resourceTypes: azure.storage.common.sas.AccountSasResourceType +``` + +#### azure.storage.common.sas.AccountSasSignatureValues.AccountSasSignatureValues + +```text +ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + assv = azure.storage.common.sas.AccountSasSignatureValues( ... + expiryTime, permissions, services, resourceTypes); + + Argument types: + expiryTime: datetime + permissions: azure.storage.common.sas.AccountSasPermission + services: azure.storage.common.sas.AccountSasService + resourceTypes: azure.storage.common.sas.AccountSasResourceType +``` + +### azure.storage.common.StorageSharedKeyCredential + +Superclass: azure.object + +```text +STORAGESHAREDKEYCREDENTIAL SharedKey credential policy + Used to put into a header to authorize requests. +``` + +#### azure.storage.common.StorageSharedKeyCredential.StorageSharedKeyCredential + +```text +STORAGESHAREDKEYCREDENTIAL SharedKey credential policy + Used to put into a header to authorize requests. +``` + +#### azure.storage.common.StorageSharedKeyCredential.getAccountName + +```text +GETACCOUNTNAME Gets the account name associated with the request + The accountName is returned as a character vector. +``` + +### azure.storage.file + +### azure.storage.file.datalake + +### azure.storage.file.datalake.models + +### azure.storage.file.datalake.models.PathItem + +Superclass: azure.object + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathItem.PathItem + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathItem.getName + +```text +GETNAME Get the name property + A character vector is returned. +``` + +#### azure.storage.file.datalake.models.PathItem.isDirectory + +```text +ISDIRECTORY Get the isDirectory property + A logical is returned. +``` + +### azure.storage.file.datalake.models.PathProperties + +Superclass: azure.object + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathProperties.PathProperties + +```text +Copyright 2022 The MathWorks, Inc. +``` + +### azure.storage.file.datalake.sas + +### azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues + +Superclass: azure.object + +```text +DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.file.datalake.sas.PathSasPermission or + FileSystemSasPermission + Or + + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier); + + Argument types: + identifier: Creates an object with the specified identifier. + NOTE: Identifier can not be used for a UserDelegationKey SAS. + Type character vector or scalar string. +``` + +#### azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues.DataLakeServiceSasSignatureValues + +```text +DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.file.datalake.sas.PathSasPermission or + FileSystemSasPermission + Or + + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier); + + Argument types: + identifier: Creates an object with the specified identifier. + NOTE: Identifier can not be used for a UserDelegationKey SAS. + Type character vector or scalar string. +``` + +### azure.storage.file.datalake.sas.FileSystemSasPermission + +Superclass: azure.object + +```text +FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.FileSystemSasPermission + +```text +FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission + +```text +HASEXECUTEPERMISSION Returns the execute permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission + +```text +HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission + +```text +HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission + +```text +HASMOVEPERMISSION Returns the move permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.parse + +```text +PARSE Creates a FileSystemSasPermission from the specified permissions string + A azure.storage.file.datalake.sas.FileSystemPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission + +```text +SETEXECUTEPERMISSION Sets the execute permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission + +```text +SETADDPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission + +```text +SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission + +```text +SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission + +```text +SETMOVEPERMISSION Sets the move permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission + +```text +SETCREATEPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.file.datalake.sas.PathSasPermission + +Superclass: azure.object + +```text +PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.PathSasPermission + +```text +PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission + +```text +HASEXECUTEPERMISSION Returns the execute permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission + +```text +HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission + +```text +HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission + +```text +HASMOVEPERMISSION Returns the move permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.parse + +```text +PARSE Creates a PathSasPermission from the specified permissions string + A azure.storage.file.datalake.sas.PathSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission + +```text +SETEXECUTEPERMISSION Sets the execute permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setListPermission + +```text +SETADDPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission + +```text +SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission + +```text +SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setMovePermission + +```text +SETMOVEPERMISSION Sets the move permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.file.datalake.DataLakeDirectoryClient + +Superclass: azure.object + +```text +DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.DataLakeDirectoryClient + +```text +DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.createFile + +```text +CREATEFILE Creates a new file within a directory + By default, this method will not overwrite an existing file. + To enable overwrite set an overwrite argument to true. + A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.delete + +```text +DELETE DataLakeDirectoryClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteDirectory + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory + +```text +DELETEDIRECTORY Deletes the directory - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteDirectory. + + Example: + client.deleteDirectory() +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile('myfile.txt') +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory + +```text +DELETESUBDIRECTORY Deletes the specified sub-directory in the directory + If the sub-directory doesn't exist or is not empty the operation fails. + subdirectoryName is provided as a character vector or scalar string. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.exists + +```text +EXISTS Gets if the path this client represents exists in Azure + This does not guarantee that the path type (file/directory) matches expectations. + E.g. a DataLakeFileClient representing a path to a datalake directory will + return true, and vice versa. + A logical is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath + +```text +GETDIRECTORYPATH Gets the path of this file, not including the name of the resource itself + A character vector is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl + +```text +GETDIRECTORYURL Gets the URL of the directory represented by this client + A matlab.net.URI is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient + +```text +GETFILECLIENT Create a DataLakeFileClient concatenating fileName to the DataLakeDirectoryClient +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.listPaths + +```text +LISTPATHS Returns a list of files/directories in this account + Paths are returned as an array of + azure.storage.file.datalake.models.PathItem objects. + If there are no keys an empty array is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.rename + +```text +RENAME Moves the directory to another location within the file system + Arguments must be scalar strings or character vectors. + + destinationFileSystem is the file system of the destination within the account. + Use an empty array [] to use the current file system. + + destinationPath Relative path from the file system to rename the directory to. + This excludes the file system name, e.g. to move a directory with: + fileSystem = "myfilesystem", path = "mydir/mysubdir" + to another path in myfilesystem e.g.: newdir then set the destinationPath to "newdir" + + A DataLakeDirectoryClient used to interact with the newly created directory is returned. +``` + +### azure.storage.file.datalake.DataLakeFileClient + +Superclass: azure.object + +```text +DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder or retrieved via + getFileClient(). +``` + +#### azure.storage.file.datalake.DataLakeFileClient.DataLakeFileClient + +```text +DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder or retrieved via + getFileClient(). +``` + +#### azure.storage.file.datalake.DataLakeFileClient.delete + +```text +DELETE DataLakeFileClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteFile + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile() +``` + +#### azure.storage.file.datalake.DataLakeFileClient.exists + +```text +EXISTS Gets if the path this client represents exists in Azure + This does not guarantee that the path type (file/directory) matches expectations. + E.g. a DataLakeFileClient representing a path to a datalake directory will + return true, and vice versa. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.getFilePath + +```text +GETFILEPATH Gets the path of this file, not including the name of the resource itself + A character vector is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.getFileUrl + +```text +GETFILEURL Gets the URL of the file represented by this client + A matlab.net.URI is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.readToFile + +```text +READTOFILE Reads the entire file into a file specified by the path + By default a file will not be overwritten and if the file already exists a + FileAlreadyExistsException Java will be thrown. A logical overwrite flag + can be optionally provided. + An azure.storage.file.datalake.models.PathProperties is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.rename + +```text +RENAME Moves the file to another location within the file system + Arguments must be scalar strings or character vectors. + + destinationFileSystem is the file system of the destination within the account. + Use a string or character vector of zero length for the current file system. + + destinationPath is the relative path from the file system to rename the file to. + This excludes the file system name, e.g. to move a file with: + fileSystem = "myfilesystem", path = "mydir/hello.txt" + to another path in myfilesystem e.g.: newdir/hi.txt + then set the destinationPath = "newdir/hi.txt" + + A DataLakeFileClient used to interact with the newly created file is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.uploadFromFile + +```text +UPLOADFROMFILE Creates a file with the content of the specified file + By default, this method will not overwrite an existing file. + filePath is provided as a character vector or scalar string. +``` + +### azure.storage.file.datalake.DataLakeFileSystemClient + +Superclass: azure.object + +```text +DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations + This client is instantiated through DataLakeFileSystemClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.DataLakeFileSystemClient + +```text +DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations + This client is instantiated through DataLakeFileSystemClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory + +```text +CREATEDIRECTORY Creates a new directory within a file system + By default, this method will not overwrite an existing directory. + To enable overwrite set an overwrite argument to true. + A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.delete + +```text +DELETE DataLakeFileSystemClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteFileSystem + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory + +```text +DELETEDIRECTORY Deletes the specified directory + + Example: + client.deleteDirectory('myDirectory') +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile('myfile.txt') +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.generateSas + +```text +GENERATESAS Generates a SAS for the blob + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.listPaths + +```text +LISTPATHS Returns a list of files/directories in this account + Paths are returned as an array of + azure.storage.file.datalake.models.PathItem objects. + If there are no keys an empty array is returned. +``` + +### azure.storage.file.datalake.DataLakeFileSystemClientBuilder + +Superclass: azure.object + +```text +DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.DataLakeFileSystemClientBuilder + +```text +DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient + +```text +BUILDFILESYSTEMCLIENT Creates a DataLakeFileSystemClient based on the builder + Returns a DataLakeFileSystemClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName + +```text +FILESYSTEMNAME Sets the name of the file/directory + If the path name contains special characters, pass in the url encoded version + of the path name. + A azure.storage.file.datalake.DataLakeFileSystemClientBuilder is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests sent to the service + This string should only be the query parameters (with or without a leading + '?') and not a full url. + An updated builder is returned. +``` + +### azure.storage.file.datalake.DataLakePathClientBuilder + +Superclass: azure.object + +```text +DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.DataLakePathClientBuilder + +```text +DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient + +```text +BUILDDIRECTORYCLIENT Creates a DataLakeDirectoryClient based on the builder + Returns a buildDirectoryClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient + +```text +BUILDFILECLIENT Creates a DataLakeFileClient based on options set in the builder + Returns a DataLakeFileClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName + +```text +fileSystemName Sets the name of the file system that contains the path + If the value null or empty the root file system, $root, will be used. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.pathName + +```text +PATHNAME Sets the name of the file/directory + If the path name contains special characters, pass in the url encoded version + of the path name. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests sent to the service + This string should only be the query parameters (with or without a leading + '?') and not a full url. + A azure.storage.file.datalake.DataLakePathClientBuilder is returned. +``` + +### azure.storage.queue + +### azure.storage.queue.models + +### azure.storage.queue.models.PeekedMessageItem + +Superclass: azure.object + +```text +PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue +``` + +#### azure.storage.queue.models.PeekedMessageItem.PeekedMessageItem + +```text +PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue +``` + +#### azure.storage.queue.models.PeekedMessageItem.getDequeueCount + +```text +GETDEQUEUECOUNT Get the number of times the message has been dequeued + An int64 is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getExpirationTime + +```text +GETEXPIRATIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getMessageId + +```text +GETMESSAGEID Get the Id of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getMessageText + +```text +GETMESSAGETEXT Get the content of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setDequeueCount + +```text +SETDEQUEUECOUNT Set the DequeueCount property + The DequeueCount may be of type integer + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setExpirationTime + +```text +SETEXPIRATIONTIME The time the Message was inserted into the Queue + Expiration time should be of type datetime with a time zone set. + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setInsertionTime + +```text +SETINSERTIONTIME The time the Message was inserted into the Queue + Insertion time should be of type datetime with a time zone set. + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setMessageId + +```text +SETMESSAGEID Set the messageId property + The messageId may be of type character vector or scalar string + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setMessageText + +```text +SETMESSAGETEXT Set the messageId property + The messageText may be of type character vector or scalar string + A PeekedMessageItem is returned. +``` + +### azure.storage.queue.models.QueueItem + +Superclass: azure.object + +```text +QUEUEITEM Azure Storage Queue +``` + +#### azure.storage.queue.models.QueueItem.QueueItem + +```text +QUEUEITEM Azure Storage Queue +``` + +#### azure.storage.queue.models.QueueItem.getName + +```text +GETNAME Returns the queue's name as a character vector +``` + +### azure.storage.queue.models.QueueMessageItem + +Superclass: azure.object + +```text +QUEUEMESSAGEITEM Returned when calling Get Messages on a queue +``` + +#### azure.storage.queue.models.QueueMessageItem.QueueMessageItem + +```text +QUEUEMESSAGEITEM Returned when calling Get Messages on a queue +``` + +#### azure.storage.queue.models.QueueMessageItem.getDequeueCount + +```text +GETDEQUEUECOUNT Get the number of times the message has been dequeued + An int64 is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getExpirationTime + +```text +GETEXPIRATIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.getMessageId + +```text +GETMESSAGEID Get the Id of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getMessageText + +```text +GETMESSAGETEXT Get the content of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getPopReceipt + +```text +GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getTimeNextVisible + +```text +GETTIMENEXTVISIBLE Get the timeNextVisible property + The time that the message will again become visible in the Queue. + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.setDequeueCount + +```text +SETDEQUEUECOUNT Set the DequeueCount property + The DequeueCount may be of type integer + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setExpirationTime + +```text +SETEXPIRATIONTIME The time the Message was inserted into the Queue + Expiration time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setInsertionTime + +```text +SETINSERTIONTIME The time the Message was inserted into the Queue + Insertion time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setMessageId + +```text +SETMESSAGEID Set the messageId property + The messageId may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setMessageText + +```text +SETMESSAGETEXT Set the messageId property + The messageText may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setPopReceipt + +```text +SETPOPRECEIPT Set the messageId property + The popReceipt may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setTimeNextVisible + +```text +SETTIMENEXTVISIBLE Set the timeNextVisible property + The time that the message will again become visible in the Queue. + The time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +### azure.storage.queue.models.QueueProperties + +Superclass: azure.object + +```text +QUEUEPROPERTIES Class containing properties of a specific queue +``` + +#### azure.storage.queue.models.QueueProperties.QueueProperties + +```text +QUEUEPROPERTIES Class containing properties of a specific queue +``` + +#### azure.storage.queue.models.QueueProperties.getApproximateMessageCount + +```text +GETAPPROXIMATEMESSAGECOUNT Gets the approximate number of messages in the queue + Applies at the time of properties retrieval. + An int64 is returned. +``` + +### azure.storage.queue.models.SendMessageResult + +Superclass: azure.object + +```text +SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue +``` + +#### azure.storage.queue.models.SendMessageResult.SendMessageResult + +```text +SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue +``` + +#### azure.storage.queue.models.SendMessageResult.getExpirationTime + +```text +GETEXPIRATIONTIME Time the Message will expire and be automatically deleted + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.SendMessageResult.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.SendMessageResult.getPopReceipt + +```text +GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.SendMessageResult.getTimeNextVisible + +```text +GETTIMENEXTVISIBLE Get the timeNextVisible property + The time that the message will again become visible in the Queue. + A datetime value is returned, with time zone configured for UTC. +``` + +### azure.storage.queue.sas + +### azure.storage.queue.sas.QueueSasPermission + +Superclass: azure.object + +```text +QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a QueueSasSignatureValues + object +``` + +#### azure.storage.queue.sas.QueueSasPermission.QueueSasPermission + +```text +QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a QueueSasSignatureValues + object +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasProcessPermission + +```text +HASPROCESSPERMISSION Returns the process permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission + +```text +HASUPDATEPERMISSION Returns the update permission status + The result is returned as a logical +``` + +#### azure.storage.queue.sas.QueueSasPermission.parse + +```text +PARSE Creates a QueueSasPermission from the specified permissions string + A azure.storage.queue.sas.QueueSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, u, or p. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setProcessPermission + +```text +SETPROCESSPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setUpdatePermission + +```text +SETUPDATEPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.queue.sas.QueueServiceSasSignatureValues + +Superclass: azure.object + +```text +QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime + permissions: azure.storage.queue.sas.QueueSasPermission +``` + +#### azure.storage.queue.sas.QueueServiceSasSignatureValues.QueueServiceSasSignatureValues + +```text +QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime + permissions: azure.storage.queue.sas.QueueSasPermission +``` + +### azure.storage.queue.QueueClient + +Superclass: azure.object + +```text +QUEUECLIENT Client performs generic queue operations +``` + +#### azure.storage.queue.QueueClient.QueueClient + +```text +QUEUECLIENT Client performs generic queue operations +``` + +#### azure.storage.queue.QueueClient.clearMessages + +```text +CLEARMESSAGES Deletes all messages in the queue +``` + +#### azure.storage.queue.QueueClient.create + +```text +CREATE Creates a new queue +``` + +#### azure.storage.queue.QueueClient.delete + +```text +DELETE QueueClient destructor - in MATLAB delete is a + reserved method name for the class destructor. This method + does not delete Queues on Azure. To delete the Azure + Queue use the deleteQueue method in MATLAB. +``` + +#### azure.storage.queue.QueueClient.deleteMessage + +```text +DELETEMESSAGE Deletes the specified message from the queue + The messageId and popReceipt arguments should be of type character vector or + scalar string +``` + +#### azure.storage.queue.QueueClient.deleteQueue + +```text +DELETEQUEUE Deletes the queue +``` + +#### azure.storage.queue.QueueClient.generateSas + +```text +GENERATESAS Generates a SAS for the queue + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.queue.QueueClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.getQueueName + +```text +GETQUEUENAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.getQueueUrl + +```text +GETQUEUEURL Get associated URL + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.peekMessage + +```text +PEEKMESSAGE Peeks the first message in the queue + A peek request retrieves a message from the front of the queue without + changing its visibility. If no message is found an empty double is + returned. +``` + +#### azure.storage.queue.QueueClient.receiveMessage + +```text +RECEIVEMESSAGE Retrieves the first message in the queue + The message is hidden from other operations for 30 seconds. + If no message is found an empty double is returned. +``` + +#### azure.storage.queue.QueueClient.receiveMessages + +```text +RECEIVEMESSAGES Retrieves up to the maximum number of messages from the queue + Messages are hidden from other operations for the timeout period. + + maxMessages + Maximum number of messages to get. + If there are less messages exist in the queue than requested + all the messages will be returned. If left empty only 1 message + will be retrieved, the allowed range is 1 to 32 messages. + + visibilityTimeout - Optional. + The timeout period for how long the message is invisible in + the queue. If left empty the received messages will be + invisible for 30 seconds. The timeout must be between 1 + second and 7 days. + + timeout - Optional. + Timeout applied to the operation. + If a response is not returned before the timeout concludes + a RuntimeException will be thrown. + + context - TODO + + If a any of visibilityTimeout, timeout or context are provided all must be + provided. + + An array of QueueMessageItem is returned. +``` + +#### azure.storage.queue.QueueClient.sendMessage + +```text +SENDMESSAGE Sends a message that has a time-to-live of 7 days + The message is instantly visible. + A SendMessageResult is returned. +``` + +### azure.storage.queue.QueueClientBuilder + +Superclass: azure.object + +```text +QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients +``` + +#### azure.storage.queue.QueueClientBuilder.QueueClientBuilder + +```text +QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients +``` + +#### azure.storage.queue.QueueClientBuilder.buildClient + +```text +BUILDCLIENT Creates a QueueClient based on options set in the builder + A built QueueClient object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.queueName + +```text +QUEUENAME Sets the name of the container that contains the queue + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.queue.QueueServiceClient + +Superclass: azure.object + +```text +QUEUESERVICECLIENT Service client performs generic queue operations +``` + +#### azure.storage.queue.QueueServiceClient.QueueServiceClient + +```text +QUEUESERVICECLIENT Service client performs generic queue operations +``` + +#### azure.storage.queue.QueueServiceClient.createQueue + +```text +CREATEQUEUE Creates a queue in with the specified name + A QueueClient is returned. +``` + +#### azure.storage.queue.QueueServiceClient.deleteQueue + +```text +DELETEQUEUE Deletes a queue in with the specified name +``` + +#### azure.storage.queue.QueueServiceClient.generateAccountSas + +```text +GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.queue.QueueServiceClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueServiceClient.getQueueClient + +```text +GETQUEUECLIENT Constructs a QueueClient that interacts with the specified queue + A QueueClient is returned. +``` + +#### azure.storage.queue.QueueServiceClient.getQueueServiceUrl + +```text +GETQUEUESERVICEURL Gets the URL of the storage queue +``` + +#### azure.storage.queue.QueueServiceClient.listQueues + +```text +Lists all queues in the storage account without their metadata + TODO listQueues probably SDK bug - Only the fist page of queues is + currently listed. +``` + +### azure.storage.queue.QueueServiceClientBuilder + +Superclass: azure.object + +```text +QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients +``` + +#### azure.storage.queue.QueueServiceClientBuilder.QueueServiceClientBuilder + +```text +QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients +``` + +#### azure.storage.queue.QueueServiceClientBuilder.buildClient + +```text +BUILDCLIENT Creates a QueueServiceClient based on options set in the builder + A built QueueServiceClient object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.object + +Superclass: dynamicprops + +```text +OBJECT Root Class for all Azure wrapper objects +``` + +#### azure.object.object + +```text +logObj = Logger.getLogger(); + write(logObj,'debug','Creating root object'); +``` + +#### azure.object.setSystemProperties + +```text +azure.object.setSystemProperties is a function. + v = azure.object.setSystemProperties +``` + +### mathworks + +### mathworks.adx + +### mathworks.adx.NullPolicy + +```text +NullPolicy Enumeration used to determine how null values ard handled in MATLAB + + Values: + ErrorAny: Error if any null values are detected + ErrorLogicalInt32Int64: Error if null values are detected for logicals, + int32s or int64s that do not support missing or NaN + AllowAll: All null types to map to missing, NaN or NaT for + all data types + Convert2Double: Convert logicals, int32s, & int64s to doubles +``` + +```text +Enumeration values: + ErrorAny + ErrorLogicalInt32Int64 + AllowAll + Convert2Double + +``` + +#### mathworks.adx.NullPolicy.NullPolicy + +```text +NullPolicy Enumeration used to determine how null values ard handled in MATLAB + + Values: + ErrorAny: Error if any null values are detected + ErrorLogicalInt32Int64: Error if null values are detected for logicals, + int32s or int64s that do not support missing or NaN + AllowAll: All null types to map to missing, NaN or NaT for + all data types + Convert2Double: Convert logicals, int32s, & int64s to doubles +``` + +### mathworks.adx.KQLQuery + +```text +KQLQuery Runs a KQL query + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + cluster: A non default cluster can be specified as a string or character vector. + + bearerToken: Token used to authenticate KQL queries only, overrides JSON + settings file based authentication. Provided as a text scalar. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + useParallel: A logical to enable the use of Parallel Computing Toolbox if + available to improve performance on large queries. + Default is false. Applies to KQL queries only. + See: Documentation/Performance.md for more details. + + parallelThreshold: The number of rows above which a parpool will be started + rather than just working serially, if making a large + query or repeated queries then the overhead caused by + the creation of a parpool should be amortized. + The default is 1000 rows. + + verbose: A logical to enable additional output. Default is false. + + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A logical to indicate if the query succeed or not. + + requestId: The request's ID string in ADX. + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was cancelled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion +``` + +### mathworks.adx.adxRoot + +```text +adxRoot Function to return the root folder for the ADX interface + + ADXRoot alone will return the root for the MATLAB code in the + project. + + ADXRoot with additional arguments will add these to the path + + funDir = mathworks.adx.adxRoot('app', 'functions') + + The special argument of a negative number will move up folders, e.g. + the following call will move up two folders, and then into + Documentation. + + docDir = mathworks.adx.adxRoot(-2, 'Documentation') +``` + +### mathworks.adx.clustersGet + +```text +clustersGet Returns a Cluster object for a given or default Cluster URL + In the case of error a adx.control.models.ErrorResponse is returned + or an error is thrown. + + Example: + % Get a cluster Object for the current default cluster + result = mathworks.adx.clustersGet(); +``` + +### mathworks.adx.createTable + +```text +createTable Creates a table in a given database + The contents of the table are not ingested, only the schema + + Require arguments: + matlabTable : The matlabTable to base Kusto table upon. Type table. + The table need not have content only columns of the + correct types. + tableName : The name of the table to create. Type string. + + Optional arguments: + tableProperties : Key value properties for the table, Type containers.Map. + database : Non default database name. Type string. + cluster : Non default cluster name. Type string. + bearerToken : Non default token value. Type string. + + Returns a logical true and a table describing the created table or a + logical false and a adx.control.models.ErrorResponse or an empty MATLAB Table. + + Example: + + % Create a sample table T + LastName = ["Sanchez";"Johnson";"Li"]; + Age = [int32(38); int32(43); int32(38)]; + Height = [int64(71); int64(69); int64(64)]; + Weight = [176; 163; 131]; + T = table(LastName,Age,Height,Weight); + [tf, result] = mathworks.adx.createTable(T, "health") + + tf = + logical + 1 + result = + 1x5 table + + TableName Schema DatabaseName Folder DocString + _________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ____________ _________ _________ + "health" "{"Name":"health","OrderedColumns":[{"Name":"LastName","Type":"System.String","CslType":"string"},{"Name":"Age","Type":"System.Int32","CslType":"int"},{"Name":"Height","Type":"System.Int64","CslType":"long"},{"Name":"Weight","Type":"System.Double","CslType":"real"}]}" "testdb1" + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/create-table-command +``` + +### mathworks.adx.dropTable + +```text +dropTable Drops a table from a given database + + The .drop table command only soft deletes the data. + Data can't be queried, but is still recoverable from persistent storage. + The underlying storage artifacts are hard-deleted according to the + recoverability property in the retention policy that was in effect at + the time the data was ingested into the table. + + Require argument: + tableName : The name of the table to drop. Type string. + + Optional arguments: + ifExists : If specified and if true the command won't fail if the table + doesn't exist. Type logical. + database : Non default database name. Type string. + cluster : Non default cluster name. Type string. + bearerToken : Non default token value. Type string. + + Returns a table of remaining tables and some properties or an + adx.control.models.ErrorResponse. + + Example: + + result = mathworks.adx.dropTable("TestTable") + result = + 5x4 table + TableName DatabaseName Folder DocString + _________________ ____________ _________ _________ + "airlinesmall" "testdb1" + "airlinesmallcsv" "testdb1" + "itable" "testdb1" + "myparquet" "testdb1" + "outagesTable" "testdb1" + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/drop-table-command +``` + +### mathworks.adx.exportToBlob + +```text +exportToBlob Exports data to an Azure blob + + Required arguments + storageConnectionString: SAS URL for the destination blob + + query: The result of the query is written to a blob. + + Optional arguments + compressed: Logical to indicate if the results should be compressed, default is true + + outputDataFormat: String to indicate the output file format the default is parquet + Supported values are: csv, tsv, json, and parquet. + + database: Database name string, the default is taken from the JSON settings file. + + cluster: Cluster name string, the default is taken from the JSON settings file. + + bearerToken: String containing a specific bearerToken + + Return values + tf: Logical to indicate if the command succeeded. + + Result: On success contains the result of the query on failure contains a + adx.control.models.ErrorResponse + + Example: + exportURL = "https://.blob.core.windows.net/"; + exportURI = matlab.net.URI(exportURL); + SAS = exportURI.EncodedQuery; + query = "table('" + "mytablename" + "', 'all')"; + [tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query); + % Assuming tf == true + downloadURL = result.Path(1) + "?" + SAS; + downloadURI = matlab.net.URI(downloadURL); + % The default export format is parquet + localFile = websave("exportedTable.gz.parquet", downloadURI); + T = parquetread(localFile); + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-export/export-data-to-storage +``` + +### mathworks.adx.ingestFile + +```text +ingestTableQueue Ingests a local file to Azure Data Explorer using Azure blob + + Arguments: + localFile: Path to file to be ingested. + + tableName: Table to ingest the data to. + + Optional arguments: + database: database name, if not specified the database configured in + the json settings file will be used. + + format: Format of the file to be ingested, if not specified the file + extension will be used. + + blobName: Name of the blob to upload to, if not specified a name will be + generated based on the local file. + + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. + + mode: "drop" drop the existing table if it exists before ingesting + "create" create the table if it does not exist + "add" (Default) ingest into an existing table + + Return values: + success: A logical true is returned if a success message is returned. + + result: Tabular output of the command if successful otherwise a + adx.control.models.ErrorResponse + + Example: + % Get filename & path for the outages.parquet file + info = parquetinfo('outages.parquet'); + success = mathworks.adx.ingestFile(info.Filename, 'outagesTable'); + + + Table Exists + ----------------------------------------------------- + | True | False + ----------------------------------------------------- + Mode | | + create | add | create, add + drop | drop, create, add | create add + add (default) | add | error +``` + +### mathworks.adx.ingestFileQueue + +```text +INGESTSINGLEFILE Ingests a local file to Azure Data Explorer using Azure blob & queue + + Arguments: + localFile: Path to file to be ingested. + + Optional named arguments: + database: database name, if not specified the database configured in + the JSON settings file will be used. + format: Format of the file to be ingested, if not specified the file + extension will be used. + blobName: Name of the blob to upload to, if not specified a name will be + generated based on the local file. + cluster: Cluster name, if not specified the database configured in + the JSON settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the JSON settings file will be used. + tableName: Table to ingest the data to, default is ingestedTable- + + Return values + success: A logical true is returned if a success message is returned. + + Example: + % Get filename & path for the outages.parquet file + info = parquetinfo('outages.parquet'); + success = mathworks.adx.ingestFileQueue(info.Filename, 'tableName', 'outagesTable') +``` + +### mathworks.adx.ingestFromQuery + +```text +ingestFromQuery Ingest data using the result of a command or query + + This ingestion method is intended for exploration and prototyping. + Do not use it in production or high-volume scenarios. + + Command If table exists If table doesn't exist + ------------------------------------------------------------------------------------------- + set The command fails The table is created and data is ingested + append Data is appended to the table The command fails + set-or-append Data is appended to the table The table is created and data is ingested + set-or-replace Data replaces the data The table is created and data is ingested + in the table + + Arguments + command One of: set, append, set-or-append or set-or-replace. + Type scalar text. + + tableName Name of the table to ingest into. Type scalar text. + + queryOrCommand Command or query to append to produce the dta to ingest. + Type scalar text. + + Optional named arguments + async Logical to indicate if async mode should be used or not. + Default is false. + + database Non default database name. Type scalar text. + + cluster Non default cluster name. Type scalar text. + + propertyNames One or more supported ingestion properties used + to control the ingestion process. + + propertyValues Property values that correspond the propertyNames, specified + as a cell array. + + scopes Non default scopes value. Type scalar text. + + convertDynamics Logical to determine if dynamic fields are decoded or not. + Default is true. + + nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + allowNullStrings Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is true. + + verbose A logical to enable additional output. Default is true. + + Return values + success A logical to indicate if the query succeed or not. + + result Table containing the primary result or first table of the + command response. If the request failed the result will + be a adx.control.models.ErrorResponse rather than a table. + + requestId The request's ID string in ADX. Type scalar string. + + extentId The unique identifier for the data shard that was generated + by the command. Type scalar string. + + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query +``` + +### mathworks.adx.ingestInline + +```text +ingestInline Ingests limited amounts of data into Kusto directly from MATLAB + + This ingestion method is intended for exploration and prototyping. + Do not use it in production or high-volume scenarios. + + The destination table should exist before calling this function. + + You must have at least Table Ingestor permissions to run this command. + + Arguments + tableName Name of the table to ingest into. Type scalar text. + + ingestData Data to be ingested, must be of formats that are convertible + to Kusto literals and compatible with the destination table + schema. Type cell array, table, primitive variable/array. + + Optional named arguments + tableExistsCheck Check if the table exists before proceeding. Type logical, + default true. + + checkSchema Check that the destination schema is compatible with the + ingest data. Type logical, default true. + + database Non default database name. Type scalar text. + + cluster Non default cluster name. Type scalar text. + + propertyNames One or more supported ingestion properties used + to control the ingestion process. + + propertyValues Property values that correspond the propertyNames, specified + as a cell array. + + scopes Non default scopes value. Type scalar text. + + convertDynamics Logical to determine if dynamic fields are decoded or not. + Default is true. + + nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + allowNullStrings Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is true. + + verbose A logical to enable additional output. Default is true. + + Return values + success A logical to indicate if the query succeed or not. + + result Table containing the primary result or first table of the + command response. If the request failed the result will + be a adx.control.models.ErrorResponse rather than a table. + + requestId The request's ID string in ADX. Type scalar string. + + extentId The unique identifier for the data shard that was generated + by the command. Type scalar string. + + If table existence check and the schema compatibility check fail empty + result, requestId & extentId values are returned along with a logical false + success. + + While not intended for performance sensitive applications disabling the + table existence check and the schema compatibility check where appropriate + using tableExistsCheck and checkSchema respectively. + + Example: + localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); + tableName = "outages"; + ingestData = praquetTable(1,:); + + [success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData) + + success = + logical + 1 + result = + 1x5 table + ExtentId ItemLoaded Duration HasErrors OperationId + ______________________________________ _____________________________________________ ________ _________ ______________________________________ + "8de6b799-6e12-4994-b57b-ed75e15db0a8" "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf" 00:00:00 false "cd4184ca-0d31-4c42-a273-5f2953f76ddf" + requestId = + "63bb1cea-b589-45ac-82ad-00d68ca96aeb" + extentId = + "8de6b799-6e12-4994-b57b-ed75e15db0a8" + + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-inline +``` + +### mathworks.adx.ingestTable + +```text +ingestTable Ingests a MATLAB table to an Azure Data Explorer Table + The table is converted to a temporary local parquet file to facilitate + ingestion. + + Example: + inputTable = parquetread("myfile.parquet"); + [success, result] = mathworks.adx.ingestTable(inputTable, tableName="mytablename") + + Arguments: + T: A MATLAB table + + Options: + tableName: A name for the table, if not specified the tabled will + be named ingestedTable- + database: database name, if not specified the database configured in + the json settings file will be used. + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. + mode: "drop" drop an existing table with the tableName before ingesting + "create" create the table if it does not exist + "add" (Default) ingest into an existing table + verbose: Logical to enable additional feedback, default is true +``` + +### mathworks.adx.ingestTableQueue + +```text +ingestTableQueue Ingests a MATLAB table to an Azure Data Explorer Table + The table is converted to a temporary local parquet file to facilitate + ingestion. + + Arguments: + T: A MATLAB table. + + Optional named arguments: + tableName: A name for the table, if not specified the tabled will + be named ingestedTable- + database: database name, if not specified the database configured in + the json settings file will be used. + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. +``` + +### mathworks.adx.isClusterRunning + +```text +isClusterRunning Returns a logical true if the cluster is running + If the cluster is not running a false is returned. The state is optionally + displayed. An optional adx.control.models.Cluster object is returned with + full cluster metadata information. + + Example: + tf = mathworks.adx.isClusterRunning(); +``` + +### mathworks.adx.listTables + +```text +listTables Returns a list of tables and their properties + + contains the specified table or all tables in the + database with a detailed summary of each table's properties. + You must have at least Database User, Database Viewer, or Database + Monitor permissions to run this command. + + Optional arguments + database: Database name string, the default is taken from the JSON settings file. + + cluster: Cluster name string, the default is taken from the JSON settings file. + + Returns + tableNames: A string array of the table names. + + Success: Logical true if the query successfully completes, otherwise false. + + tableDetails: A table containing metadata about the tables. +``` + +### mathworks.adx.mgtCommand + +```text +mgtCommand Runs a management command + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + scopes: For commands scopes can be specified as a string array. + + cluster: A non default cluster can be specified as a string or character vector. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + verbose: A logical to enable additional output. + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A logical to indicate if the query succeed or not. + + requestId: The request's ID string in ADX + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was canceled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion +``` + +### mathworks.adx.run + +```text +run Runs a KQL query or management command + This ia a high-level interface to simplify running most queries. + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + scopes: For commands scopes can be specified as a string array. + + cluster: A non default cluster can be specified as a string or character vector. + + bearerToken: Token used to authenticate KQL queries only, overrides JSON + settings file based authentication. Provided as a text scalar. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + customRowDecoder: A function handle to a function that will be called to decode + Primary Result table JSON rows instead of the default decoder. + See: Documentation/Performance.md for more details. + + useParallel: A logical to enable the use of Parallel Computing Toolbox if + available to improve performance on large queries. + Default is false. Applies to KQL queries only. + See: Documentation/Performance.md for more details. + + parallelThreshold: The number of rows above which a parpool will be started + rather than just working serially, if making a large + query or repeated queries then the overhead caused by + the creation of a parpool should be amortized. + The default is 1000 rows. + + verbose: A logical to enable additional output. + + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A boolean to indicate if the query succeed or not. + + requestId: The request's ID string in ADX + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was cancelled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion + + Example: + [result, success] = mathworks.adx.run('print mycol="Hello World"') +``` + +### mathworks.adx.tSQLQuery + +```text +tSQLQuery Runs a T-SQL query + This is a higher-level wrapper function for KQLQuery which sets the + query propertyName and propertyValue to enable the tSQL syntax. + Input arguments and return values are as per KQLQuery. + + It assumes the query_language property is not already set, if so it will + be overwritten. + + See: https://learn.microsoft.com/en-us/azure/data-explorer/t-sql +``` + +### mathworks.adx.tableExists + +```text +TABLEEXISTS Returns true is a given table exists + + Example: + tableExists = mathworks.adx.tableExists(tableName, database=database, cluster=cluster); +``` + +### mathworks.internal + +### mathworks.internal.adx + +### mathworks.internal.adx.buildSettingsFile + +```text +buildSettingsFile Gets user input for JSON settings file fields + Template files can be found in /Software/MATLAB/config + + Optional argument + filename: Filename to store settings, default is /Software/MATLAB/config/adx.Client.Settings.json> +``` + +### mathworks.internal.adx.charOrString2Guid + +```text +charOrString2Guid Converts a scalar MATLAB string or char to a Kusto guid + Example: guid(74be27de-1e4e-49d9-b579-fe0b331d3642) + A scalar or empty input value must be provided. + If an empty value is provided guid(null) is returned. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/guid +``` + +### mathworks.internal.adx.charOrString2String + +```text +charOrString2String Converts a MATLAB char or string to a Kusto string + A string is returned. + Input must be a empty, missing, scalar string or character vector. + + If the optional logical named argument verbatim (default: false) a @ sign is + prepended to the string. The backslash character (\) stands for itself and + isn't an escape character. Prepending the @ character to string literals + serves as a verbatim identifier. In verbatim string literals, double quotes + are escaped with double quotes and single quotes are escaped with single quotes. + + An obfuscated string is created by setting the optional named argument + obfuscated (default: false). It prepends a H character to a verbatim + or string literal. The obfuscated argument is not applied to multi-lines. + + Multi-line string literals support newline (\n) and return (\r) characters. + Multi-line string literals do not support escaped characters, similar to verbatim + string literals. Multi-line string literals don't support obfuscation. + + Kusto does not support null strings hence empty or missing MATLAB string + values are treated as follows: + + | Literal Verbatim Multi-line + ----------------------------------------------- + missing | "" @"" `````` + empty | "" @"" `````` + + If an empty string is provided "", `````` or @"" is returned. + + Optional named arguments + verbatim Logical, default: false + multiline Logical, default: false + + Verbatim and multiline cannot be enabled at the same time. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/string +``` + +### mathworks.internal.adx.datetime2datetime + +```text +datetime2datetime Converts a scalar MATLAB datetime to a Kusto datetime + A scalar or empty input value must be provided. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/datetime +``` + +### mathworks.internal.adx.dispErrorAdditionalInfo + +```text +Displays a adx.control.models.ErrorAdditionalInfo +``` + +### mathworks.internal.adx.dispErrorDetails + +```text +dispErrorDetails Display a adx.control.models.ErrorDetail +``` + +### mathworks.internal.adx.dispErrorResponse + +```text +dispErrorResponse Display a adx.control.models.ErrorResponse +``` + +### mathworks.internal.adx.doubleOrSingle2Decimal + +```text +doubleOrSingle2Decimal Converts a MATLAB double or single to a Kusto decimal + A string is returned. + If empty decimal(null) is returned. + Otherwise decimal() is returned. + A scalar or empty input value must be provided. + + Note Arithmetic operations involving decimal values are significantly slower + than operations on real data type. As MATLAB does not support floating point + precision beyond double using doubleOrSingle2Real() instead is recommended + if a real value can be used. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/decimal +``` + +### mathworks.internal.adx.doubleOrSingle2Real + +```text +doubleOrSingle2Real Converts a MATLAB double or single to a Kusto real + A string is returned. + If empty real(null) is returned. + If nan real(nan) is returned. + If +inf real(+inf) is returned. + If -inf real(-inf) is returned. + A scalar or empty input value must be provided. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/real +``` + +### mathworks.internal.adx.duration2Timespan + +```text +duration2Timespan Converts a MATLAB duration to a Kusto timespan + Input must be a scalar duration, duration.empty or duration NaN. + A timespan literal is returned as a scalar string. + At most millisecond precision is supported. + A duration.empty or duration NaN are returned as "timespan(null)" + Other values are returned in the format: "timespan(days.hours:minutes:seconds.milliseconds)" + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan +``` + +### mathworks.internal.adx.exampleCustomRowDecoder + +```text +exampleCustomRowDecoder Example of a custom JSON parser function + Sample decoder that handles an array of rows of the form: + [128030544,1.0,"myStringValue-1"] + with fields of types int64, double and string. + + It will not process other data and is intended for speed rather than + strict correctness or robustness. + + The custom decoder is applied to the PrimaryResult rows field only. + + It is required to return a cell array of size number of rows by the + number of columns that can be converted to a MATLAB table with the + given schema. + + It is not required to respect input arguments flags if foreknowledge of + returned data permits it. + + Custom decoders are applied to nonprogressive KQL API v2 mode queries only. + If support for other query types is required contact MathWorks. + + Example: + query = sprintf('table("%s", "all")', tableName); + crd = @mathworks.internal.adx.exampleCustomRowDecoder; + [result, success] = mathworks.adx.run(query, customRowDecoder=crd); + + For a generic decoder see: getRowsWithSchema. +``` + +### mathworks.internal.adx.getDataBearerToken +```text +getDataBearerToken Gets a bearer token by forcing a query ``` -*azure.security.keyvault.secrets.models.SecretProperties.getId* - -```notalanguage - GETID Get the secret identifier - A character vector is returned. +### mathworks.internal.adx.getDefaultConfigValue +```text +getDefaultConfigValue Reads a field from the config file + A string is returned. ``` -*azure.security.keyvault.secrets.models.SecretProperties.getKeyId* - -```notalanguage - GETKEYID Get the keyId identifier - A character vector is returned. +### mathworks.internal.adx.getIngestionResources +```text +getIngestionResources Get queues and other values to do ingestion + Returns a adx.data.models.IngestionResourcesSnapshot ``` -*azure.security.keyvault.secrets.models.SecretProperties.getName* - -```notalanguage - GETNAME Get the secret name - A character vector is returned. +### mathworks.internal.adx.getKustoIdentityToken +```text +getKustoIdentityToken Management query to request a Kusto Identity Token + Query used is: .get kusto identity token ``` -*azure.security.keyvault.secrets.models.SecretProperties.getVersion* - -```notalanguage - GETVERSION Get the keyId identifier - A character vector is returned. +### mathworks.internal.adx.getRowWithSchema +```text +GETROWWITHSCHEMA Extract a row of data as a cell array from a JSON string using schemas + For detail on dynamic values see: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic ``` +### mathworks.internal.adx.getRowsWithSchema -#### azure.security.keyvault.keys.KeyClient +```text +GETROWSWITHSCHEMA Extract rows of data as a cell array from a JSON string using schemas + For detail on dynamic values see: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic +``` + +### mathworks.internal.adx.getTableAndSchemas -```notalanguage - KEYCLIENT A KeyClient object for transacting keys with the Key Vault +```text +getTableAndSchemas Returns a MATLAB table to store a returned Kusto table - Example: - % Create a client using the createKeyVaultClient() function - % Here an optional non default configuration file path is provided that holds - % Client Secret style credentials - keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + The table is not populated. + Column names are mapped to valid MATLAB column names using matlab.lang.makeValidName + Datatype schemas are also returned. + MATLAB types mapped from the Kusto types using mathworks.internal.adx.mapTypesKustoToMATLAB - Or + Required Arguments + columns: 1d array of adx.data.models.Column - % If a configuration file path is not provided *createKeyVaultClient()* will search - % MATLAB path for a configuration file named ```keyvaultsettings.json```: - keyClient = createKeyVaultClient('Type','Key'); + numRows: Number of rows in the table - Or + Optional Arguments + name: Name for the table, the default is: "". matlab.lang.makeValidName is applied. - % Alternatively a client can also be created manually to - % Configure the logger level and message prefix if not already configured - initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 - % Configure a credentials object based on a JSON config file - credentials = configureCredentials(which('keyvaultsettings.json')); + verbose: Logical to enable additional output, default is false. - % Create a client builder object, a KeyClient in this case - builder = azure.security.keyvault.keys.KeyClientBuilder(); + Return Values: + mTable: Unpopulated MATLAB table. - % Configure the builder using its methods - builder = builder.credential(credentials); - builder = builder.httpClient(); - settings = loadConfigurationSettings(which('keyvaultsettings.json')); - builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + matlabSchema: String array of the underlying MATLAB types for columns which + may be stored in a cell to enable representation of nulls - % Create the client - keyClient = builder.buildClient(); - + tableSchema: String array of the actual MATLAB column types used to create the table + + kustoSchema: String array of the Kusto type fields for the columns also + stored in the table descriptions fields ``` -*azure.security.keyvault.keys.KeyClient.beginDeleteKey* +### mathworks.internal.adx.getTableSchema -```notalanguage - BEGINDELETESECRET Deletes a key by name from Key Vault - A azure.core.util.polling.syncPoller is returned. - For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller - keyName can be provided as a scalar character vector or string. +```text +getTableSchema - Example: - key = keyClient.getKey('myKeyName'); - syncPoller = keyClient.beginDeleteKey('myKeyName'); - % Block until completion, allow a 10 second timeout - syncPoller.waitForCompletion(10); - % Other syncPoller methods are available, e.g. cancelOperation() - + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/show-table-schema-command ``` -*azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey* +### mathworks.internal.adx.int2IntOrLong -```notalanguage - BEGINRECOVERDELETEDKEY Recovers the deleted key in the key vault to its - latest version and can only be performed on a soft-delete enabled vault. - A azure.core.util.polling.syncPoller is returned. - For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller - keyName can be provided as a scalar character vector or string. +```text +int2IntOrLong Converts a MATLAB int to a Kusto int or long + A scalar or empty input value must be provided. + A scalar string is returned. + If empty an int(null) or long(null) is returned. - Example: - syncPoller = keyClient.beginRecoverDeletedKey('myKeyName'); - % Block until completion, allow a 10 second timeout - syncPoller.waitForCompletion(10); - % Other syncPoller methods are available, e.g. cancelOperation() - + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/int + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/long ``` -*azure.security.keyvault.keys.KeyClient.createKey* +### mathworks.internal.adx.isMappableMATLABToKusto -```notalanguage - CREATEKEY Creates a new key and stores it in the key vault - A key name argument is provided as a character vector or scalar string. - A azure.security.keyvault.keys.models.KeyType is provided as an argument - to indicate which type of key to create. - An azure.security.keyvault.keys.models.KeyVaultKey is returned. +```text +isMappableMATLABToKusto Returns true if a MATLAB type can be converted to a given Kusto type - Example: - % Create a client - keyClient = createKeyVaultClient('Type','Key'); - % Create a key type, in this case RSA - rsaKeyType = azure.security.keyvault.keys.models.KeyType.RSA; - % Create the key - key = KeyClient.createKey('myKeyName', rsaKeyType); - + The following mappings are supported: + + Kusto Type MATLAB Types + ---------------------------------------------------- + int int8, uint8, int16, uint16, int32 + long int8, uint8, int16, uint16, int32, uint32, int64 + string string char + guid string char + real double single + decimal double single + datetime datetime + bool logical + timespan duration + dynamic See optional allowDynamic flag + + As dynamic datatype are "dynamic" the contents must be parsed to determine + if the can be converted the optional named argument allowDynamic if true + makes the assumption that a dynamic type will be convertible. + The default value is true. False is a more conservative value. ``` -*azure.security.keyvault.keys.KeyClient.getDeletedKey* - -```notalanguage - GETDELETEDKEY Gets the public part of a deleted key. - The name argument is provided as a character vector or scalar string. - A azure.security.keyvault.keys.models.DeletedKey is returned. - - Example: - key = keyClient.getDeletedKey('myKeyName'); +### mathworks.internal.adx.kustoSchemaToNamesAndTypes +```text +kustoSchemaToNamesAndTypes Splits a Kusto schema into string arrays of column names and types ``` -*azure.security.keyvault.keys.KeyClient.getKey* +### mathworks.internal.adx.loadConfig -```notalanguage - GETKEY Get the public part of the latest version of the specified key - The name argument is provided as a character vector or scalar string. - A azure.security.keyvault.keys.models.KeyVaultKey is returned. +```text +LOADCONFIG Reads a config file if it exists - Example: - key = keyClient.getKey('myKeyName'); - + Optional argument + configFile: Path to JSON settings ``` -*azure.security.keyvault.keys.KeyClient.getVaultUrl* - -```notalanguage - GETVAULTURL Gets the vault endpoint url to which service requests are sent to - A character vector is returned. - A URL has the form: https://.vault.azure.net/ - The vaultUrl can optionally be stored in the package's JSON configuration file. +### mathworks.internal.adx.logical2Bool +```text +logical2Bool Converts a MATLAB logical to a Kusto bool + A string is returned. + If empty bool(null) is returned, otherwise bool(true) + or bool false. + A scalar or empty input value must be provided. ``` -*azure.security.keyvault.keys.KeyClient.listDeletedKeys* - -```notalanguage - LISTDELETEDKEYS Lists deleted keys of the key vault. - Properties are returned as an array of - azure.security.keyvault.keys.models.DeletedKey objects. - If there are no keys an empty array is returned. - - Example - % Get a list the key properties - deletedKeys = keyClient.listDeletedKeys(); +### mathworks.internal.adx.mapTypesKustoToMATLAB +```text +MAPTYPESKUSTOTOMATLAB Map Kusto datatypes to corresponding MATLAB type + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + for .net mapping ``` -*azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys* - -```notalanguage - LISTPROPERTIESOFKEYS Lists keys in the key vault - Properties are returned as an array of - azure.security.keyvault.keys.models.KeyProperties objects. - If there are no keys an empty array is returned. - - Example - % Get a list the key properties - keyProperties = keyClient.listPropertiesOfKeys(); - % Look at some of the data returned i.e. the key name - propList(1).getName(); +### mathworks.internal.adx.mapTypesMATLABToKusto +```text +mapTypesMATLABToKusto Map MATLAB datatypes to corresponding Kusto type + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + for .net mapping ``` -*azure.security.keyvault.keys.KeyClient.purgeDeletedKey* +### mathworks.internal.adx.queryV1Response2Tables -```notalanguage - PURGEDELETEDKEY Permanently deletes the specified key without the - possibility of recovery. The Purge Deleted Key operation is applicable - for soft-delete enabled vaults. This operation requires the keys/purge - permission. - The name argument is provided as a character vector or scalar string. - The function throws an error if no deleted key can be found. Returns - nothing upon success. +```text +queryV1Response2Tables Convert a v1 API response to MATLAB tables - Example: - keyClient.purgeDeletedKey('myKeyName'); - + Required argument + response: A adx.data.models.QueryV1ResponseRaw as returned by queryRun(). + + Optional arguments + nullPolicy: Enumeration to determine how null values should be handled. + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + + convertDynamics: Logical to determine if dynamic fields should be decoded + from JSON. Default is true. + + allowNullStrings: Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is false. + + useParallel: Logical to enable the use of Parallel Computing Toolbox if available + + parallelThreshold: Threshold for row number above which Parallel Computing + Toolbox will be used, default is 1000. + + customRowDecoder: Function handle to a non default row conversion function + Function is applied to the Primary Result table only. + In certain unexpected states it is not applied. + + verbose: Logical to enable additional output, default is false. + + Return values + primaryResult: The primary result as a MATLAB table. + + resultTables: The other returned tables as MATLAB tables. ``` +### mathworks.internal.adx.queryV2Response2Tables -#### azure.security.keyvault.keys.KeyClientBuilder +```text +queryV2Response2Tables Converts a v2 API response to MATLAB tables + + Required Argument: + v2Response: A adx.data.models.QueryV2ResponseRaw which been processed by JSONMapper + + Optional Arguments: + convertDynamics: Logical to determine if Dynamic fields are decoded or not + Default is true + + nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + + allowNullStrings: Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is false. + customRowDecoder: Function handle to a non default row conversion function + Function is applied to the Primary Result table only. + In certain unexpected states it is not applied. + + useParallel: Logical to enable the use of Parallel Computing Toolbox if available + + parallelThreshold: Threshold for row number above which Parallel Computing + Toolbox will be used, default is 1000. + + verbose: Logical to enable additional output, default is false + + Return Values: + primaryResult: The primary result as a MATLAB table + + resultTables: The other returned tables as MATLAB tables. + + dataSetHeader: A adx.data.models.DataSetHeader describes the high-level properties + of the returned data + + dataSetCompletion: A adx.data.models.DataSetCompletion indicates success and other + properties of the query + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` -```notalanguage - KEYCLIENTBUILDER Builder for KeyClient object - Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder - object as an argument to create a MATLAB builder from the Java builder. +### mathworks.internal.adx.setCustomQueryHeaders +```text +setCustomHeaders Sets custom header fields Query calls + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/request#request-headers ``` -*azure.security.keyvault.keys.KeyClientBuilder.buildClient* - -```notalanguage - BUILDCLIENT Creates a KeyClient based on options configured in the builder +### mathworks.internal.adx.setDefaultConfigValue +```text +setDefaultConfigValue Sets a field in the config file ``` -*azure.security.keyvault.keys.KeyClientBuilder.credential* +### mathworks.internal.adx.timespanLiteral2duration -```notalanguage - CREDENTIAL Sets the credentials used to authorize a client's requests - An updated builder object is returned. +```text +timespanLiteral2duration Converts a Kusto timespan value to a MATLAB duration - Example: - configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); - credentials = configureCredentials(configFilePath); - builder = builder.credential(credentials); - + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan ``` -*azure.security.keyvault.keys.KeyClientBuilder.httpClient* - -```notalanguage - HTTPCLIENT Sets the HttpClient to use for sending a receiving requests - Currently the Netty client is configured by default. Other options may be added - in the future. An updated builder object is returned. - This method will apply http proxy settings if defined in MATLAB Web preferences. +### mathworks.internal.adx.timespanValue2duration +```text +timespanValue2duration Converts a timespan value to a MATALB duration + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan ``` -*azure.security.keyvault.keys.KeyClientBuilder.vaultUrl* - -```notalanguage - VAULTURL Sets the vault URL to send HTTP requests to - vaultUrl should be of type character vector or scalar string. - An updated builder object is returned. - A URL has the form: https://.vault.azure.net/ - The vaultUrl can optionally be stored in the package's JSON configuration file. +### mathworks.internal.adx.toDynamic +```text +toDynamic Creates a Kusto dynamic literal value + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic ``` +### mathworks.internal.adx.toKustoLiteral -#### azure.security.keyvault.keys.models.JsonWebKey - -```notalanguage - JSONWEBKEY Key as per http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18 - This can be used an intermediate format for converting to other key types or - for extracting elements of a key. +```text +toKustoLiteral Converts a MATLAB value to a Kusto Literal + Supports duration, logical, int, double, single, string, char, and + datetime MATLAB input types. - Example: - key = keyClient.getKey('myKeyName'); - % Return as a jsonWebKey and test if valid - jsonWebKey = key.getKey(); - tf = jsonWebKey.isValid); - % Convert to an RSA key - keyRsa = jsonWebKey.toRsa(false); - + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types ``` -*azure.security.keyvault.keys.models.JsonWebKey.clearMemory* - -```notalanguage - CLEARMEMORY Clears key materials in the underlying Java SDK +### mathworks.internal.adx.validateConfig +```text +VALIDATECONFIG Sanity checks configuration settings ``` -*azure.security.keyvault.keys.models.JsonWebKey.getId* +### mathworks.internal.blob -```notalanguage - GETID Get the kid value - A character vector is returned. +### mathworks.internal.blob.clientCopyToBlobContainer +```text +clientCopyToBlobContainer Copies a file to a blob for ingestion + Uses MATLAB's built in copy file function. ``` -*azure.security.keyvault.keys.models.JsonWebKey.getKeyType* - -```notalanguage - GETKEYTYPE Get the kty value - A azure.security.keyvault.keys.models.KeyType is returned. +### mathworks.internal.blob.clientUploadToBlobContainer +```text +clientUploadToBlobContainer Uploads a file to a blob for ingestion + Uses Azure Services support package ``` -*azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey* - -```notalanguage - HASPRIVATEKEY Verifies whether the JsonWebKey has a private key or not - A logical is returned. +### mathworks.internal.blob.sanitizeBlobName +```text +sanitizeBlobName Checks that a name complies with Blob name limits ``` -*azure.security.keyvault.keys.models.JsonWebKey.isValid* - -```notalanguage - ISVALID Verifies whether the JsonWebKey is valid - A logical is returned. - -``` +### mathworks.internal.curl -*azure.security.keyvault.keys.models.JsonWebKey.toAes* +### mathworks.internal.curl.adxCurlWrite -```notalanguage - TOAES Converts JSON web key to AES key - A key of type javax.crypto.SecretKey is returned. +```text +adxCurlWrite adx caller for mathworks.internal.curlWrite + Inserts custom headers required by ADX. + + This function may be changed or removed in a future release without + notice. currently only windows is supported. + It is a Proof of Concept testing mechanism to enable TCP keep-alive + Packets only, it should be avoided in production use. + + Arguments: + clusterUrl: A cluster URL including https:// as scalar text if not provided + an attempt will be made to read the value from adx.Client.Settings.json + + urlPath: Query URL path as scalar text, default: "/v1/rest/query" + + query: KQL query to execute as scalar text, default (for PoC purposes): + "print mycol=""Hello World""" + Alternatively a a file containing the complete Query body can be + provided byt prefixing the file name with a "@" symbol as + normal in curl command syntax. + When the JSON body for the query is constructed only the csl + and db fields are populated, if further properties are + required then the JSON body should be provided in its + entirety as described above + + bearerToken: A bearerToken as scalar text if not provided an attempt will + be made to read the value from adx.Client.Settings.json + + id: Request id header value as scalar text, if not provided a UUID is created + + + skipJSONDecode: A logical to determine if JSON is decode using MATLAB's + jsondecode or not, default is true + + propertyNames: Property names to be applies to the query, specified as a + string array + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array + + verbose: A logical to enable additional feedback, default is true + WARNING: verbose output will display the bearer token + + + Returned values: + tf: Logical that indicates if a HTTP status 200 was returned + + result: Result of the query as a string or a decoded JSON struct + In certain error cases an empty struct is returned + + id: Request Id + + + Examples: + + If called with no arguments with a adx.Client.Settings.json file + present containing a valid bearer token the query: print mycol='Hello World' + should run, returning a logical true, populated result struct and + request UUID: + + [tf, result, id] = mathworks.internal.curl.adxCurlWrite() + + + Provide key arguments: + + clusterUrl = "https://mycluster.westeurope.kusto.windows.net"; + query = 'print mycol="Hello World"'; + bearerToken = "eyJ0ec1RuQ"; + [tf, result, id] = mathworks.internal.adxCurlWrite(clusterUrl=clusterUrl, bearerToken=bearerToken, query=query, verbose=true) + + + Convert the primary result to a MATLAB table + Assumes the url path is specifying a v1 API, as per default: + + [tf, result, id] = mathworks.internal.curl.adxCurlWrite(skipJSONDecode=true); + [primaryResult, resultTables] = mathworks.internal.adx.queryV1Response2Tables(result); + + + Set sample request properties & convert to a MATLAB table: + + propertyNames = {"notruncation", "query_datetimescope_column", "servertimeout"}; + tenMinDuration = minutes(10); + propertyValues = {true, "mycol", tenMinDuration}; + [tf,result,id] = mathworks.internal.curl.adxCurlWrite(verbose=true, propertyNames=propertyNames, propertyValues=propertyValues, skipJSONDecode=true) + [primaryResult, ~] = mathworks.internal.adx.queryV1Response2Tables(result) +``` + +### mathworks.internal.curl.curlWrite + +```text +curlWrite webwrite like functionality via curl PoC implementation + This function may be changed or removed in a future release without + notice. Currently only windows is supported. + Currently only the HTTP POST method is supported. + This function is provided as a testing mechanism for TCP keep-alive + Packets. + + Required Arguments + + url: A MATLAB.net.URI containing the host to connect to an any + required path elements e.g.: + matlab.net.URI("https://myhost.example.com:1234/path1/path2") + + dataFilename: A scalar text value for a filename containing the JSON + request body payload to send to the endpoint. + + webOpts: A weboptions object. Used to configure curl arguments. + NB: This value is currently required but NOT yet used. + + Optional Positional Argument + + verbose: A logical in enable or disable increased logging + Default is true + + Optional Named Arguments + + keepaliveTime: An integer number of seconds after which to send a + keep-alive packet. Default is 60. + + additionalArguments: A string array of extra arguments to be appended to + the generated curl command. Prefix and postfix padding + will be added. + + skipJSONDecode: A logical to skip decoding returned JSON and just + return a scalar character vector. Default is false. + + Return Value: + + Response: Decoded JSON or a character vector containing the returned JSON + See: skipJSONDecode. Example: - key = keyClient.getKey('myKeyName'); - jsonWebKey = key.getKey(); - keyAes = jsonWebKey.toAes(); - + + result = mathworks.internal.curl.curlWrite(matlab.net.URI("https://httpbin.org/post"), "", weboptions, true) + + See also: mathworks.internal.curl.adxCurlWrite ``` -*azure.security.keyvault.keys.models.JsonWebKey.toEc* - -```notalanguage - TOEC Converts JSON web key to EC key pair & optionally include the private key - Include private key if includePrivateParameters set to true - A key pair of type java.security.KeyPair is returned. +### mathworks.internal.countDown +```text +countDown displays a countDown of wait seconds ``` -*azure.security.keyvault.keys.models.JsonWebKey.toRsa* - -```notalanguage - TORSA Converts JSON web key to RSA key pair - Include private key if includePrivateParameters set to true - A key pair of type java.security.KeyPair is returned. - - Example: - key = keyClient.getKey('myKeyName'); - % Return as a jsonWebKey - jsonWebKey = key.getKey(); - % Convert to an RSA key - keyRsa = jsonWebKey.toRsa(false); +### mathworks.utils -``` +### mathworks.utils.jwt -*azure.security.keyvault.keys.models.JsonWebKey.toString* +### mathworks.utils.jwt.ClaimsJM -```notalanguage - TOSTRING Return as a character vector +Superclass: adx.control.JSONMapper +```text +ClaimsJM JWT Claims that use JSON Mapper ``` +#### mathworks.utils.jwt.ClaimsJM.ClaimsJM -#### azure.security.keyvault.keys.models.DeletedKey - -```notalanguage - DELETEDKEY Deleted Key is the resource consisting of name, recovery - id, deleted date, scheduled purge date and its attributes inherited - from KeyVaultKey. It is managed by Key Service. - - DeletedKey follows the Azure KeyVault Java SDK design, meaning that - DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like - getKey and getName. It appears however that some of those methods do - not actually return a value for deleted keys and it even appears to - depend on how the DeletedKey was obtained. A DeletedKey obtained - through getDeletedKey *does* appear to return a name when calling - getName whereas DeletedKey obtained through listDeletedKeys does - *not*. These are all behaviors of the underlying Azure KeyVault Java - SDK and not MATLAB specific behaviors. - - In that sense, to determine the name of a deleted key, it appears the - best option is to call getRecoveryId and parse the name from the URI - this returns. - +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. ``` -*azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate* - -```notalanguage - GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. - A datetime object is returned. +### mathworks.utils.jwt.JWT +```text +JWT Represent a Java Web Token + All times as assumed to be UTC + + This is not a generic JWT interface and is intended for use with + Azure Data Explorer only at this point. ``` -*azure.security.keyvault.keys.models.DeletedKey.getRecoveryId* - -```notalanguage - GETRECOVERYID Get the recoveryId identifier. - The URI is returned as character array. +#### mathworks.utils.jwt.JWT.JWT +```text +JWT Create a JWT object from a token string ``` -*azure.security.keyvault.keys.models.DeletedKey.getDeletedOn* - -```notalanguage - GETDELETEDON Get the deleted UTC time. - A datetime object is returned. +#### mathworks.utils.jwt.JWT.expiryTime +```text +mathworks.utils.jwt.JWT/expiryTime is a function. + exp = expiryTime(obj) ``` +#### mathworks.utils.jwt.JWT.isExpired -#### azure.security.keyvault.keys.models.KeyProperties +```text +mathworks.utils.jwt.JWT/isExpired is a function. + tf = isExpired(obj) +``` -```notalanguage - KEYPROPERTIES Contains the properties of the secret except its value - - Example - keyClient = createKeyVaultClient('Type','Key'); - propList = keyClient.listPropertiesOfKeys(); - % Look at a name in a returned property - name = propList(1).getName(); +#### mathworks.utils.jwt.JWT.isTimeValid +```text +mathworks.utils.jwt.JWT/isTimeValid is a function. + tf = isTimeValid(obj) ``` -*azure.security.keyvault.keys.models.KeyProperties.getId* - -```notalanguage - GETID Get the secret identifier - A character vector is returned. +#### mathworks.utils.jwt.JWT.notBeforeTime +```text +mathworks.utils.jwt.JWT/notBeforeTime is a function. + nbf = notBeforeTime(obj) ``` -*azure.security.keyvault.keys.models.KeyProperties.getKeyId* +### mathworks.utils.msOAuth2Client -```notalanguage - GETKEYID Get the keyId identifier - A character vector is returned. +Superclass: handle +```text +msOAuth2Client obtains and caches tokens for the Microsoft + Identity Platform. + + OAuth2Client Methods: + OAuth2Client - Constructor + getToken - Obtain an access token for a requested scope + getFullToken - Obtain the full token for a requested scope + + Note: the access tokens and refresh tokens are stored inside a + MAT-file in plain-text and are not encrypted. The MAT-file is saved + as .mlMsTokenCache in your home directory. This file should be kept + confidential. ``` -*azure.security.keyvault.keys.models.KeyProperties.getName* - -```notalanguage - GETNAME Get the key name - A character vector is returned. +#### mathworks.utils.msOAuth2Client.acquireClientCredentialToken +```text +mathworks.utils.msOAuth2Client/acquireClientCredentialToken is a function. + token = acquireClientCredentialToken(obj, scopes) ``` -*azure.security.keyvault.keys.models.KeyProperties.getVersion* - -```notalanguage - GETVERSION Get the key version - A character vector is returned. +#### mathworks.utils.msOAuth2Client.acquireDeviceCodeToken +```text +Initiate Device Code Authentication ``` +#### mathworks.utils.msOAuth2Client.acquireInteractiveBrowserToken -#### azure.security.keyvault.keys.models.KeyVaultKey +```text +mathworks.utils.msOAuth2Client/acquireInteractiveBrowserToken is a function. + token = acquireInteractiveBrowserToken(obj, scopes, serviceMetadataURI) +``` -```notalanguage - KEYVAULTSECRET KeyVaultKey class - Creates a azure.security.keyvault.keys.models.KeyVaultKey object. - A com.azure.security.keyvault.keys.models.KeyVaultKey java object is a required - input argument. A number of methods return KeyVaultKey objects. - - Example - % Get a KeyVaultKey object - key = keyClient.getKey('myKeyName'); - keyType = key.getKeyType(); - jsonWebKey = key.getKey(); +#### mathworks.utils.msOAuth2Client.acquireManagedIdentityToken +```text +mathworks.utils.msOAuth2Client/acquireManagedIdentityToken is a function. + token = acquireManagedIdentityToken(obj, scopes) ``` -*azure.security.keyvault.keys.models.KeyVaultKey.getId* - -```notalanguage - GETID Returns the ID value of the key - A character vector is returned. +#### mathworks.utils.msOAuth2Client.acquireToken +```text +mathworks.utils.msOAuth2Client/acquireToken is a function. + token = acquireToken(obj, scopes) ``` -*azure.security.keyvault.keys.models.KeyVaultKey.getKey* - -```notalanguage - GETKEY Get the public part of the latest version of the key - A azure.security.keyvault.keys.models.JsonWebKey is returned - - Example: - jsonWebKey = key.getKey(); +#### mathworks.utils.msOAuth2Client.addTokenToCache +```text +Check whether any tokens have been cached for the given + tenant at all ``` -*azure.security.keyvault.keys.models.KeyVaultKey.getKeyType* - -```notalanguage - GETKEYTYPE Returns the type of a key - Returns a azure.security.keyvault.keys.models.KeyType +#### mathworks.utils.msOAuth2Client.findTokenInCache +```text +Return an empty token if returning early ``` -*azure.security.keyvault.keys.models.KeyVaultKey.getName* - -```notalanguage - GETNAME Returns the key name - A character vector is returned. +#### mathworks.utils.msOAuth2Client.getFullToken +```text +GETFULLTOKEN Obtains a token in the same way as getToken, + only instead of only returning the access token itself, a + struct is returned which contains the accessToken, an + expiresAt field, and if available also a refreshToken. Then + syntax for this method is the same as for getToken. + + See Also: GETTOKEN ``` -*azure.security.keyvault.keys.models.KeyVaultKey.getProperties* - -```notalanguage - GETPROPERTIES Get the key properties - A azure.security.keyvault.keys.models.KeyProperties is returned. +#### mathworks.utils.msOAuth2Client.getToken +```text +GETTOKEN Obtain and return an access token for the configured + Tenant, ClientID and Scopes. + + If a token for configured Tenant, ClientID and Scopes: + - IS found in the cache and it + - Has NOT expired, it is returned + - HAS expired and a refresh token IS available, it + is refreshed and then returned, if refresh fails + a new token is requested and returned + - HAS expired and there is NO refresh token, a new + token is requested and returned + - Is NOT found in the cache, a new token is requested + and returned upon success + + Note: to obtain a refresh token, explicitly include + "offline_access" in the requested scopes. + + Examples: + + Obtain an access token for Azure Key Vault Scope with + refresh token: + + access_token = GETTOKEN(["https://vault.azure.net/.default","offline_access"]) + + Obtain an access token for Azure Storage without + refresh token: + + access_token = GETTOKEN(["https://storage.azure.com/.default"]) ``` +#### mathworks.utils.msOAuth2Client.initializeCache -#### azure.security.keyvault.keys.models.KeyType +```text +Load cache from disk if it exists or start a new one +``` -```notalanguage - KEYTYPE Defines enumeration values for KeyType - Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM +#### mathworks.utils.msOAuth2Client.msOAuth2Client +```text +msOAuth2Client Constructor + + Create a client for user principals through Device Code + authentication: + + client = msOAuth2Client(tenantId,clientId); + + When working with Device Code authentication, user + interaction is needed if a new token has to be requested. + If the requested token already exists in the cache (and can + be refreshed if needed) no further user interaction should + be required. + + Create a client for service principals through Client + Secret authentication: + + client = msOAuth2Client(tenantId,clientId,clientSecret); + + When working with Client Secret authentication, no user + interaction is required. ``` +#### mathworks.utils.msOAuth2Client.refreshToken -```notalanguage -Enumeration: - EC - EC_HSM - OCT - OCT_HSM - RSA - RSA_HSM +```text +Perform the refresh ``` -*azure.security.keyvault.keys.models.KeyType.fromString* - -```notalanguage - FROMSTRING Creates or finds a KeyType from its string representation - A azure.security.keyvault.keys.models.KeyType is returned. - Input may be a character vector or scalar string. - Input is not case sensitive. - Accepted values are: EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM. - This is a static method. +#### mathworks.utils.msOAuth2Client.saveCache +```text +Save the cache to disk ``` -*azure.security.keyvault.keys.models.KeyType.toJava* - -```notalanguage - TOJAVA Converts to a com.azure.security.keyvault.keys.models.KeyType Java object +### mathworks.utils.UUID +```text +UUID Returns a UUID string as created by java.util.UUID.randomUUID ``` -*azure.security.keyvault.keys.models.KeyType.toString* - -```notalanguage - TOSTRING Returns text form of a azure.security.keyvault.keys.models.KeyType - A character vector is returned. +### mathworks.utils.addArgs +```text +addArg Builds and named argument cell array + + Example: + args = mathworks.utils.addArgs(options, ["authMethod", "profileName"]); + x = myFunc(args{:}); ``` +### Logger -#### Logger +Superclass: handle -```notalanguage - Logger - Object definition for Logger +```text +Logger - Object definition for Logger --------------------------------------------------------------------- Abstract: A logger object to encapsulate logging and debugging messages for a MATLAB application. @@ -5596,36 +17314,95 @@ Enumeration: Examples: logObj = Logger.getLogger(); write(logObj,'warning','My warning message') - ``` -*Logger.delete* - -```notalanguage - If a log file was open, close it +#### Logger.Logger +```text +Logger - Object definition for Logger + --------------------------------------------------------------------- + Abstract: A logger object to encapsulate logging and debugging + messages for a MATLAB application. + + Syntax: + logObj = Logger.getLogger(); + + Logger Properties: + + LogFileLevel - The level of log messages that will be saved to the + log file + + DisplayLevel - The level of log messages that will be displayed + in the command window + + LogFile - The file name or path to the log file. If empty, + nothing will be logged to file. + + Messages - Structure array containing log messages + + Logger Methods: + + clearMessages(obj) - Clears the log messages currently stored in + the Logger object + + clearLogFile(obj) - Clears the log messages currently stored in + the log file + + write(obj,Level,MessageText) - Writes a message to the log + + Examples: + logObj = Logger.getLogger(); + write(logObj,'warning','My warning message') ``` -*Logger.error* - -```notalanguage - Expect an MException to be returned if so catch it and throw as the - caller to keep logger entries out of the console output +#### Logger.clearLogFile +```text +clearLogFile - Method to clear messages in the log file + ------------------------------------------------------------------------- + Abstract: Clears the log messages currently stored in the log + file + + Syntax: + logObj.clearLogFile(Level) + clearLogFile(logObj) + + Inputs: + logObj - Logger object + + Outputs: + none ``` -*Logger.verbose* +#### Logger.clearMessages -```notalanguage -Logger.verbose is a function. - Logger.verbose(varargin) +```text +clearMessages - Method to clear messages in the Logger + ------------------------------------------------------------------------- + Abstract: Clears the log messages currently stored in the + Logger object + + Syntax: + logObj.clearMessages(Level) + clearMessages(logObj) + + Inputs: + logObj - Logger object + + Outputs: + none +``` + +#### Logger.closeLogFile +```text +If a log file was open, close it ``` -*Logger.debug* +#### Logger.debug -```notalanguage - DEBUG List MATLAB debugging functions +```text +DEBUG List MATLAB debugging functions dbstop - Set breakpoint. dbclear - Remove breakpoint. @@ -5645,41 +17422,73 @@ Logger.verbose is a function. To resume program execution, use DBCONT or DBSTEP. To exit from the debugger use DBQUIT. +``` + +#### Logger.delete +```text +If a log file was open, close it ``` -*Logger.warning* +#### Logger.error -```notalanguage -Logger.warning is a function. - Logger.warning(varargin) +```text +Expect an MException to be returned if so catch it and throw as the + caller to keep logger entries out of the console output +``` +#### Logger.getLogger + +```text +This method returns the singleton logger object. Only one + logger is allowed in a MATLAB session, and this method will + retrieve it. ``` -*Logger.log* +#### Logger.log -```notalanguage - LOG Natural logarithm. +```text +LOG Natural logarithm. LOG(X) is the natural logarithm of the elements of X. Complex results are produced if X is not positive. See also LOG1P, LOG2, LOG10, EXP, LOGM, REALLOG. +``` +#### Logger.openLogFile + +```text +Was a file name passed in? ``` -*Logger.getLogger* +#### Logger.processMessage -```notalanguage - This method returns the singleton logger object. Only one - logger is allowed in a MATLAB session, and this method will - retrieve it. +```text +Called from write() + Handle the file logging first as if an error throwing the error + will halt execution and the file logging (if enabled) will not + happen + Should the message be written to the log file? +``` + +#### Logger.verbose + +```text +Logger.verbose is a function. + Logger.verbose(varargin) +``` + +#### Logger.warning +```text +Logger.warning is a function. + Logger.warning(varargin) ``` -*Logger.write* +#### Logger.write -```notalanguage - write - Method to write messages to the Logger +```text +write - Method to write messages to the Logger ------------------------------------------------------------------------- Abstract: Adds a new message to the Logger, with the specified message level and text @@ -5701,112 +17510,48 @@ Logger.warning is a function. Examples: logObj = Logger.getLogger; write(logObj,'warning','My warning message') - -``` - -*Logger.clearLogFile* - -```notalanguage - clearLogFile - Method to clear messages in the log file - ------------------------------------------------------------------------- - Abstract: Clears the log messages currently stored in the log - file - - Syntax: - logObj.clearLogFile(Level) - clearLogFile(logObj) - - Inputs: - logObj - Logger object - - Outputs: - none - ``` -*Logger.clearMessages* +### AzureCommonRoot -```notalanguage - clearMessages - Method to clear messages in the Logger - ------------------------------------------------------------------------- - Abstract: Clears the log messages currently stored in the - Logger object - - Syntax: - logObj.clearMessages(Level) - clearMessages(logObj) +```text +AZURECOMMONROOT Return Azure Services root location + Locate the installation of the Azure interface package to allow easier construction - Inputs: - logObj - Logger object + The special argument of a negative number will move up folders, e.g. + the following call will move up two folders, and then into + Documentation. - Outputs: - none - -``` - -*Logger.closeLogFile* - -```notalanguage - If a log file was open, close it - -``` - -*Logger.openLogFile* - -```notalanguage - Was a file name passed in? - -``` - -*Logger.processMessage* - -```notalanguage - Called from write() - Handle the file logging first as if an error throwing the error - will halt execution and the file logging (if enabled) will not - happen - Should the message be written to the log file? - -``` - -##### AzureCommonRoot - -```notalanguage - AZURECOMMONROOT Helper function to locate the Azure Common location - Locate the installation of the Azure interface package to allow easier construction - of absolute paths to the required dependencies. - + docDir = AzureCommonRoot(-2, 'Documentation') ``` -##### AzureShell +### AzureShell -```notalanguage - AZURESHELL Invokes the Azure Web Browser based shell +```text +AZURESHELL Invokes the Azure Web Browser based shell Cloud Shell enables access to a browser-based command-line experience with Azure. It is an interactive, browser-accessible shell for managing Azure resources. The shell can be Bash or PowerShell. The system configured browser is used. Authentication will be requested if not already in place within the browser. - ``` -##### AzureStorageExplorer +### AzureStorageExplorer -```notalanguage - AZURESTORAGEEXPLORER Invokes the Azure Storage Explorer +```text +AZURESTORAGEEXPLORER Invokes the Azure Storage Explorer Brings up the Azure Storage Explorer. It is possible to specify the local installation of the storage explorer in the configuration file. By default the MATLAB path will be searched for a configuration file called storagesettings.json, however an alternative filename can be provided as an argument to this function. - ``` -##### Logger +### Logger -```notalanguage - Logger - Object definition for Logger +```text +Logger - Object definition for Logger --------------------------------------------------------------------- Abstract: A logger object to encapsulate logging and debugging messages for a MATLAB application. @@ -5840,31 +17585,12 @@ Logger.warning is a function. Examples: logObj = Logger.getLogger(); write(logObj,'warning','My warning message') - -``` - -##### compareAuthEnvVars - -```notalanguage - COMPAREAUTHENVVARS Checks matching Java & MATLAB authentication env. variables - This is a useful sanity check that variables exist in both contexts. - The following variables are tested: - AZURE_CLIENT_ID - AZURE_CLIENT_SECRET - AZURE_TENANT_ID - AZURE_CLIENT_CERTIFICATE_PATH - AZURE_USERNAME - AZURE_PASSWORD - - A variable no set in either context does not return a false. - A logical is returned. - ``` -##### configureCredentials +### configureCredentials -```notalanguage - CONFIGURECREDENTIALS Reads JSON configuration file and returns credentials object +```text +CONFIGURECREDENTIALS Reads JSON configuration file and returns credentials object A configuration file path must be passed as a string or character vector. Authentication method to use is determined using the AuthMethod field of the JSON configuration file. @@ -5891,22 +17617,20 @@ Logger.warning is a function. This option is only valid when working with the DeviceCode method and it allows specifying a custom function for displaying the Device Code login instructions. - ``` -##### configureProxyOptions +### configureProxyOptions -```notalanguage - CONFIGUREPROXYOPTIONS Configured Java proxy options object +```text +CONFIGUREPROXYOPTIONS Configured Java proxy options object A com.azure.core.http.ProxyOptions Java object is returned if a proxy is configured otherwise an empty double is returned corresponding to a null. - ``` -##### createKeyVaultClient +### createKeyVaultClient -```notalanguage - CREATEKEYVAULTCLIENT Convenience function for creating KeyClient and +```text +CREATEKEYVAULTCLIENT Convenience function for creating KeyClient and SecretClient client = createKeyVaultClient('Type','Key') creates a KeyClient with @@ -5952,13 +17676,12 @@ Logger.warning is a function. then contain a "VaultName" setting. See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS - ``` -##### createStorageClient +### createStorageClient -```notalanguage - CREATESTORAGECLIENT Convenience function for creating BlobServiceClient, +```text +CREATESTORAGECLIENT Convenience function for creating BlobServiceClient, BlobContainerClient, BlobClient, QueueServiceClient, QueueClient, DataLakeFileSystemClient, DataLakeDirectoryClient and DataLakeFileClient. @@ -6064,22 +17787,12 @@ Logger.warning is a function. to "EndPoint". See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS - -``` - -##### datetime2OffsetDateTime - -```notalanguage - DATETIME2OFFSETDATETIME Converts a MATLAB datetime to a Java - OffsetDateTime in UTC. Ideally the input MATLAB datetime has a specific - timezone set already. If no timezone is set, local is assumed. - ``` -##### initialize +### initialize -```notalanguage - INITIALIZE Configure logger and version test at Client builder entry points +```text +INITIALIZE Configure logger and version test at Client builder entry points This function need only be invoked once per session when using the package. It configures logging and proxy settings. Note the logger is a singleton so prefixes may not correspond if multiple @@ -6094,40 +17807,35 @@ Logger.warning is a function. Other uses of initialize - dlnetwork/initialize - idnlfun/initialize - lidar.labeler.AutomationAlgorithm/initialize - matlab.internal.cef.webwindow/initialize matlab.net.http.io.ContentConsumer/initialize matlab.net.http.io.ImageConsumer/initialize matlab.net.http.io.JSONConsumer/initialize matlab.net.http.io.MultipartConsumer/initialize matlab.net.http.io.StringConsumer/initialize myDeployedModule/initialize - particleFilter/initialize - PointTracker/initialize SimTimeseries/initialize - slTunable/initialize - socIPCore/initialize - stateEstimatorPF/initialize - trackingEKF/initialize - vision.labeler.AutomationAlgorithm/initialize - + simulink.Simulation/initialize ``` -##### loadConfigurationSettings +### loadConfigurationSettings -```notalanguage - LOADCONFIGURATIONSETTINGS Method to read a JSON configuration settings from a file +```text +LOADCONFIGURATIONSETTINGS Method to read a JSON configuration settings from a file The file name must be as a specified argument. JSON values must be compatible with MATLAB JSON conversion rules. See jsondecode() help for details. A MATLAB struct is returned. Field names are case sensitive. - ``` - +Microsoft Azure Data Explorer, Azure Data Lake Storage & Azure Key Vault are trademarks of the Microsoft group of companies. ------ -##### Copyright 2022-2023, The MathWorks, Inc. +**Copyright 2022-2024 The MathWorks® Inc.** + +[//]: # (Documentation generation settings: ) +[//]: # (* Including class level help text ) +[//]: # (* Including constructor help text ) +[//]: # (* Excluding inherited methods ) +[//]: # (* Excluding default MATLAB classes ) +[//]: # (* Generated: 10-Sep-2024 12:33:29 ) diff --git a/Documentation/Authentication.md b/Documentation/Authentication.md index bd6ded1..6f06b70 100644 --- a/Documentation/Authentication.md +++ b/Documentation/Authentication.md @@ -3,6 +3,9 @@ Azure® supports a variety of authentication methods. These can be invoked specifically or as a series of failover attempts in a so-called provider-chain. +Azure Data Explorer authentication support includes some of the features described +below, it is described in more detail in [ADXAuthentication.md](ADXAuthentication.md). + When working with high level functions like `createStorageClient` or `createKeyVaultClient`, these will automatically perform the authentication and then use these credentials to automatically create the service specific clients. @@ -13,10 +16,10 @@ alternative configuration filename as input. The configuration files may contain service specific non-authentication related options as well. See the service specific documentation to learn more about the default filename -for each service and how to provide an alternative filename if desired. +for each service and how to provide an alternative filename if desired. See the sections below to learn more about which settings need to be added in -the JSON configuration files for the various authentication methods. +the JSON configuration files for the various authentication methods. Alternatively, if not using the high level functions for creating service specific clients and using the Client *Builders* instead, the Credential objects @@ -74,7 +77,7 @@ Managed identities provide an identity for the Azure resource in Azure Active Directory (Azure AD) and use it to obtain Azure AD tokens. Thus identities do not have to be directly managed by the developer or end user. This can be particularly useful in a deployed scenario as credentials should not be embedded -in a compiled MATLAB application or CTF file, rather the application can in +in a compiled MATLAB® application or CTF file, rather the application can in effect derive its credentials by virtue of the machine hosting it in Azure. ### Managed Identity ```myServiceSpecificSettings.json``` @@ -357,7 +360,7 @@ workflows. This approach creates a ```StorageSharedKeyCredential``` containing an account's name and its primary or secondary accountKey. The ```accountName``` is the account name associated with the request and the ```accountKey``` is the account -access key used to authenticate the request. +access key used to authenticate the request. To obtain the primary or secondary key: @@ -453,4 +456,4 @@ credentials by passing a specific path e.g.: clientSecretCredentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ClientSecret.json')); ``` -[//]: # (Copyright 2020-2023 The MathWorks, Inc.) +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/Blob.md b/Documentation/Blob.md index aeee9f3..3d83636 100644 --- a/Documentation/Blob.md +++ b/Documentation/Blob.md @@ -2,7 +2,7 @@ Blob storage is the most common use case for Azure® Data Lake Storage Gen2. This package provides a low-level interface to blob storage and provides capabilities -not available in shipping MATLAB. This package supersedes a previously published +not available in shipping MATLAB®. This package supersedes a previously published blob storage low-level interface [https://github.com/mathworks-ref-arch/matlab-azure-blob](https://github.com/mathworks-ref-arch/matlab-azure-blob). Specifically this interface targets Gen2 storage APIs and the Azure v12 SDK @@ -480,7 +480,7 @@ It is sometimes necessary to provide a more advanced query. This can be done usi * An `azure.storage.blob.models.BlobListDetails` object * An `azure.storage.blob.models.ListBlobsOptions` object -#### Using a prefix/directory +### Using a prefix/directory `BlobContainerClient.listBlobsByHierarchy(directory)` Returns all the blobs and directories (prefixes) under the given directory (prefix). Directories will have `BlobItem.isPrefix()` set to true. Blob names are returned in lexicographic order. E.g. listing a container containing a 'foo' folder, which contains blobs 'foo1' and 'foo2', and a blob on the root level 'bar', will return the following results when prefix/directory is not set. @@ -498,7 +498,7 @@ Alternatively the following arguments can be provided `BlobContainerClient.listB * options - `ListBlobsOptions`, see below. * timeout - A number of seconds timeout value beyond which a runtime exception will be raised. -#### ListBlobsOptions +### ListBlobsOptions A `ListBlobsOptions` object allows the following criteria to be set: @@ -508,7 +508,7 @@ A `ListBlobsOptions` object allows the following criteria to be set: `set` methods return an updated `ListBlobsOptions` object. `get` methods are also provided. -#### BlobListDetails +### BlobListDetails Allows specifying of additional information to be returned with each blob when listing blobs in a container (via a BlobContainerClient object). This type is immutable to ensure thread-safety of requests, so changing the details for a different listing operation requires construction of a new object. @@ -525,7 +525,7 @@ Allows specifying of additional information to be returned with each blob when l * `getRetrieveUncommittedBlobs()` Whether blobs for which blocks have been uploaded, but which have not been committed using Put Block List, should be included in the response. * `getRetrieveVersions()` Whether versions should be returned. -### Blob properties & metadata +## Blob properties & metadata A blob's properties can be queried reason about the blob, e.g. check its MD5 or size. In this case the file/object is 0 bytes in size. @@ -611,4 +611,4 @@ Typically and by default Azure storage endpoints follow the pattern: `https://Ac For details of private endpoint use see: [https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints](https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints) -[//]: # (Copyright 2020-2023 The MathWorks, Inc.) +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/Configuration.md b/Documentation/Configuration.md index 86de025..91113b3 100644 --- a/Documentation/Configuration.md +++ b/Documentation/Configuration.md @@ -50,5 +50,6 @@ configuration file name if needed: * [Key Vault](KeyVault.md) * [Data Lake Storage Gen2](DataLakeStorageGen2.md) +* [Azure Data Explorer](DataExplorer.md) -[//]: # (Copyright 2022-2023 The MathWorks, Inc.) +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/DataExplorer.md b/Documentation/DataExplorer.md new file mode 100644 index 0000000..233b4a5 --- /dev/null +++ b/Documentation/DataExplorer.md @@ -0,0 +1,11 @@ +# Azure Data Explorer + +* [Getting Started](ADXGettingStarted.md) +* [Authentication](ADXAuthentication.md) +* [Null Data](NullData.md) +* [Dynamic Data](Dynamics.md) +* [Performance](Performance.md) +* [OpenAPI Client Generation](OpenAPI.md) +* [API Reference](APIReference.md) + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/DataLakeStorageGen2.md b/Documentation/DataLakeStorageGen2.md index 681b1a8..9d796ad 100644 --- a/Documentation/DataLakeStorageGen2.md +++ b/Documentation/DataLakeStorageGen2.md @@ -19,7 +19,6 @@ interfaces, e.g. the ```dir``` command supports accessing remote data: Where MATLAB supports the required operations directly it is recommended to use that built in functionality. - ## `createStorageClient` function The `createStorageClient` function can be used for creating BlobServiceClient, @@ -147,7 +146,9 @@ is recommended: * [https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) ## Low Level Interfaces + % This section includes the relevant sub pages in the HTML version of the documentation, please ignore when viewing the Markdown page itself. + ```{toctree} --- maxdepth: 1 @@ -157,5 +158,4 @@ Queue File ``` -[//]: # (Copyright 2020-2022 The MathWorks, Inc.) - +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/Deployment.md b/Documentation/Deployment.md index 4d6e2ed..f24d8f1 100644 --- a/Documentation/Deployment.md +++ b/Documentation/Deployment.md @@ -4,11 +4,11 @@ When compiling MATLAB™ code, in general, [MATLAB Compiler™](https://www.math Three options are discussed below for making the correct JAR-files available to the deployed component. -* The [first option](#option-one-compile-the-jar-file-into-the-standalone-component) is the easiest but will add the JAR-file to the *end* of the static class path; see the [installation documentation](Installation.md#configuring-the-matlab-java-class-path) to learn more about what limitations this may introduce depending on the platform. +* The [first option](#option-one-compile-the-jar-file-into-the-standalone-component) is the easiest but will add the JAR-file to the *end* of the static class path; see the [installation documentation](Installation.md#configuring-the-matlab-java-class-path) to learn more about what limitations this may introduce depending on the platform. -* The [second option](#option-two-modified-javaclasspathtxt-and-distribute-jar-file-next-to-component) can add the JAR-file to the *front* of the static Java class path but is more involved. +* The [second option](#option-two-modified-javaclasspathtxt-and-distribute-jar-file-next-to-component) can add the JAR-file to the *front* of the static Java class path but is more involved. -* The [last option](#option-three-make-jar-file-available-in-matlab-runtime) adds the JAR-file to the MATLAB Runtime installation rather than include it with the component, making it available to all standalone components using that MATLAB Runtime installation. +* The [last option](#option-three-make-jar-file-available-in-matlab-runtime) adds the JAR-file to the MATLAB Runtime installation rather than include it with the component, making it available to all standalone components using that MATLAB Runtime installation. ```{hint} Contact us at [mwlab@mathworks.com](mailto:mwlab@mathworks.com) if you require additional advice on your specific use-case of deploying MATLAB Code which makes use of the "MATLAB Interface *for Azure Services*". @@ -20,11 +20,11 @@ Any JAR-file which is compiled into a MATLAB Compiler (SDK) standalone component To compile the JAR-files into the component, in the Application- or Library Compiler App under "Files required for your application to run" (or when working with `mcc`, using the `-a` argument), explicitly add the following files to the component, they will not be added by automatic dependency analysis: -- `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` -- `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` -- `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` Where `$MATLABROOT` stands for the MATLAB installation directory as returned by running the `matlabroot` function in the MATLAB Command Window. @@ -56,17 +56,17 @@ Now when compiling a standalone component with this updated `javaclasspath.txt`, Further, for this workflow, in the Application- or Library Compiler App under "Files required for your application to run" (or when working with `mcc`, using the `-a` argument), explicitly add the following files to the component: -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` -- `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` -- `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` -- `$PREFDIR/javaclasspath.txt` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` +* `$PREFDIR/javaclasspath.txt` Where `$PREFDIR` stands for the MATLAB preferences directory as returned by running the `prefdir` function in the MATLAB Command Windows. Depending on the exact MATLAB Compiler version, *some* versions may already include `$PREFDIR/javaclasspath.txt` *automatically*; by adding it *explicitly* though, this approach should work in *all* supported releases. And then, if working with [MATLAB Compiler (SDK) packaged installers](https://www.mathworks.com/help/compiler/files-generated-after-packaging-application-compiler.html), under "Files installed for your end user", add: -- `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` The packaged installer will then place the JAR-file next to the standalone component during installation. Alternatively, if not working with the packaged installers, simply manually distribute `azure-common-sdk-0.2.0.jar` next to the standalone component itself, in the same directory. @@ -78,14 +78,14 @@ In some situation, for example when working with multiple MATLAB Compiler Java/. First, at compile time, again add the following two files to the "Files required for your application to run" (or using `mcc`'s `-a` flag): -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` -- `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` Then, manually copy the following three files to the target machine onto which the component will be deployed: -- `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` -- `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` -- `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` The files can basically be placed anywhere on this machine as long as they are accessible by the runtime. Lastly, also on the target machine where the MATLAB Runtime has been installed, open `$MCRROOT/toolbox/local/classpath.txt` (where `$MCRROOT` stands for the installation directory of the MATLAB Runtime) in a text editor and add the full absolute locations of the three files to the *front* of the list of JAR-files and directories in the text file. @@ -99,4 +99,4 @@ The `toolbox/local/classpath.txt` file contains a notification: For this particular use-case, this can partly be ignored, the file *may* be edited but do indeed keep in mind that it may be changed or overwritten when reinstalling the MATLAB Runtime or installing an Update to the runtime. The modification may have to be reapplied afterwards. ```` -[//]: # (Copyright 2022 The MathWorks, Inc.) +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/Dynamics.md b/Documentation/Dynamics.md new file mode 100644 index 0000000..3f26927 --- /dev/null +++ b/Documentation/Dynamics.md @@ -0,0 +1,66 @@ +# Dynamic Data + +The Azure Data Explorer® Documentations describes the dynamic data type as follows: + +The dynamic scalar data type is special in that it can take on any value of other +scalar data types from the list below, as well as arrays and property bags. +Specifically, a dynamic value can be: + + * Null. + * A value of any of the primitive scalar data types: bool, datetime, guid, int, long, real, string, and timespan. + * An array of dynamic values, holding zero or more values with zero-based indexing. + * A property bag that maps unique string values to dynamic values. The property bag has zero or more such mappings (called "slots"), indexed by the unique string values. The slots are unordered. + +For further details see: [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic) + +When ADX returns dynamic data to MATLAB® the potentially varied nature of that data +means that such a column in a results table will be of type cell. +For reasons that will be described it may be preferred to not attempt convert the +dynamic data to an underlying type(s) but rather to simply return the value +of the the dynamic as a character vector. The optional argument `convertDynamics` +can be used to control this behavior, the default value is true, i.e. attempt to +convert the dynamic data. + +If automatic decoding of a value does not give the desired result it is recommended +that the values not be decoded and custom logic be implemented to do so using the +returned character vector values. + +If a dynamic is *not* to be converted the following approach is taken. + +* If the value is presents as a JSON array or object, the character vector value +is returned. +* If the value is a JSON null, the `NullPolicy` is applied, by default a `missing` +will be returned. +* Otherwise the character vector value is returned. + +If the dynamic value is to be converted this cannot be handled with the same certainty +as the conversion of other data types. The metadata returned from ADX does not +describe the contents of the value or provide a schema that might be used to decode +it. ADX does not have such information. Thus the automatic decoding should be +considered a best effort. When decoding dynamics the following steps are taken in +sequence: + +* If the value is a JSON primitive, Booleans will be converted to logicals and numbers +will be converted to doubles. Null policy is applied. Strings will be passed to MATLAB's `jsondecode` +function. If the `jsondecode` call fails the value will be returned as a character vector. +* If the value is a JSON null `NullPolicy` is applied and by default a `missing` +is returned. +* If the value is an empty JSON array `NullPolicy` is applied and by default a missing +is returned. Non empty JSON arrays are decoded using `jsondecode`, if that fails +the character vector value is returned. +* If the value is a JSON object is decoded using decoded using `jsondecode`, if that fails +the character vector value is returned. + +*Note:* + +* For more information on MATLAB's `jsondecode` function see: +[https://www.mathworks.com/help/matlab/ref/jsondecode.html](https://www.mathworks.com/help/matlab/ref/jsondecode.html) noting that it has limitations +* For further details on the handling of null values see [NullData.md](NullData.md). +* The additional processing of dynamic values as described inevitably has a performance +impact, if this is a concern consider approaches that alter the data being queried +or queries themselves such that non dynamic data types are used. + +The `testDynamic` test function in `/matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m` +shows some simple queries that used for dynamic testing purposes. + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/FAQ.md b/Documentation/FAQ.md index eb50fa1..bb6aaa6 100644 --- a/Documentation/FAQ.md +++ b/Documentation/FAQ.md @@ -1,10 +1,12 @@ # Frequently Asked Questions -## How to change the underlying library logging level +## Azure Java SDK + +### How to change the underlying library logging level The Azure® interfaces rely on an number of underlying libraries which are included in the `Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` Jar file. -Many of these libraries use slf4j as a logging mechanism. Further, MATLAB itself +Many of these libraries use slf4j as a logging mechanism. Further, MATLAB® itself also includes slf4j and MATLAB configures it to use log4j as backend. So when used in MATLAB, these libraries end up using sl4j with log4j as backend. Which exact log4j version is used, depends on the MATLAB release. MATLAB releases up @@ -16,14 +18,30 @@ The logging level and destination of log4j versions 1.x can be controlled using `Software/MATLAB/lib/jar/log4j2.xml`. By default they log at the `ERROR` level. To change this to `INFO` for example use the following in `log4j.properties`: -``` +```text log4j.rootLogger=INFO, stdout ``` or the following in `log4j2.xml`: -``` +```xml ``` -[//]: # (Copyright 2020-2022 The MathWorks, Inc.) +## Azure Data Explorer + +### BadRequest_StreamingIngestionPolicyNotEnabled error + +This error indicates a need to configure streaming ingestion on your Azure Data Explorer cluster. +See: [https://learn.microsoft.com/en-us/azure/data-explorer/ingest-data-streaming?tabs=azure-portal%2Ccsharp#choose-the-appropriate-streaming-ingestion-type](https://learn.microsoft.com/en-us/azure/data-explorer/ingest-data-streaming?tabs=azure-portal%2Ccsharp#choose-the-appropriate-streaming-ingestion-type) + +The queries described can be issued using this package. + +### Unable to resolve the name 'com.azure.identity.InteractiveBrowserCredentialBuilder' + +This error is likely to be proceeded by `Getting ingestion resources`, the probable cause in that +the Azure Services SDK jar file which is required for interactive authentication is not found +of the Java static classpath, review the output of the startup command which may refer to this +also. + +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/File.md b/Documentation/File.md index 5d64561..b672058 100644 --- a/Documentation/File.md +++ b/Documentation/File.md @@ -4,10 +4,10 @@ The File Data Lake API currently has less implemented functionality than the equ Blob and Queue APIs, where additional API calls are needed contact MathWorks. Relevant Azure® API/service documentation: + * [https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) * [https://docs.microsoft.com/en-us/java/api/overview/azure/storage-file-datalake-readme?view=azure-java-stable](https://docs.microsoft.com/en-us/java/api/overview/azure/storage-file-datalake-readme?view=azure-java-stable) - ## File Data Lake Clients The concept of a *Client* is central to how file storage is accessed. A @@ -52,7 +52,6 @@ File path are addressable using the following URL format: Filesystems can be thought of as being similar to Blob Containers and Paths for files or Directories as being similar to Blobs. - ## Build a Filesystem Client ```matlab @@ -170,7 +169,7 @@ builder = builder.pathName('mydirectoryname'); dirClient = builder.buildDirectoryClient(); % Check if the path exists -tf = Client.exists()); +tf = Client.exists(); % Create a Directory Client from a Filesystem Client builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder(); @@ -209,10 +208,8 @@ nullVal = []; renamedDirClient = srcDirClient.rename(nullVal, 'dstDir'); ``` - ## Notes This API does not support storage accounts where hierarchical namespace (HNS) is disabled. - -[//]: # (Copyright 2022 The MathWorks, Inc.) +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/Installation.md b/Documentation/Installation.md index 7de53c3..ada0f01 100644 --- a/Documentation/Installation.md +++ b/Documentation/Installation.md @@ -8,7 +8,7 @@ git clone https://github.com/mathworks-ref-arch/matlab-azure-services.git ## Build MATLAB Azure SDK Jar -MATLAB Interface *for Azure Services* depends on the Azure® Java SDK which, +MATLAB® Interface *for Azure Services* depends on the Azure® Java SDK which, together with some helper code, first needs to be packaged into the MATLAB Azure Utility Library. Building this utility requires both a Java 1.8 SDK and Apache Maven. @@ -41,7 +41,7 @@ jar files to the static class path, these typically add them to then *end* of the static class path. For example when working with a [packaged custom toolbox](https://www.mathworks.com/help/matlab/matlab_prog/create-and-share-custom-matlab-toolboxes.html) the included jar file is added to the *end* of the static path in the end user -MATLAB installation. Or if working with MATLAB Compiler (SDK) standalone +MATLAB installation. Or if working with MATLAB Compiler® (SDK) standalone components the jar file which was packaged into the component are automatically added to the *end* of the static class path at runtime. However there may be situations in which this is not possible and then these features diff --git a/Documentation/KeyVault.md b/Documentation/KeyVault.md index e32b6c8..b93cfee 100644 --- a/Documentation/KeyVault.md +++ b/Documentation/KeyVault.md @@ -41,6 +41,7 @@ which case no configuration file may be needed. See the Name, Value pairs below for more details. ### Name, Value pairs + Additional Name, Value pairs can be supplied to configure non-default options: **`'ConfigurationFile'`**, explicitly specify which configuration file to use. diff --git a/Documentation/NullData.md b/Documentation/NullData.md new file mode 100644 index 0000000..b29d47c --- /dev/null +++ b/Documentation/NullData.md @@ -0,0 +1,96 @@ +# Null data + +In ADX all data types except string may have null values indicating that data is +not present. When bringing such data into MATLAB® consideration must be given to +the potential presence of null values. This package provides a number of approaches +to dealing with this issue. + +Many MATLAB types support the concept of "missing" data where the `missing` *value* +can be used to identify data that is not available, see also `ismissing()`. +Other datatypes support `NaN` or `NaT` to indicate *anomalous* values. + +The enumeration class `mathworks.adx.NullPolicy` can be passed as an +option to query functions to control how nulls are handled in responses. The +possible values of the enumeration are defined in the following table: + +| Enumeration | Effect | +|:---------------|------------| +| ErrorAny | Error if any null values are detected | +| ErrorLogicalInt32Int64 | Error if null values are detected for logicals, int32s or int64s | +| AllowAll | All null types to map to missing, NaN or NaT for all data types | +| Convert2Double | Convert logicals, int32s, & int64s to doubles | + +The default behavior is defined by `ErrorLogicalInt32Int64`. + +Using the `AllowAll` policy has the effect of returning data as cell array values +This has an impact on memory and performance, for large queries altering the data +or the query to remove null may be preferable. + +The following table defines how an ADX null is translated to a MATLAB value +subject to the enumeration value. +As dynamics can be converted into other types this table assumes the valid value +is not converted and thus remains a cell array containing a character vector. + +| Kusto type | MATLAB type | ADX Value | ErrorAny | ErrorLogicalInt32Int64 | AllowAll | Convert2Double | +|:-----------|:------------|:----------|:------------|:-----------------------|:------------|:-------------------| +| bool | logical | null | error | error | {missing} | NaN | +| | | valid | logical | logical | {logical} | 0 or 1 as a double | +| int | int32 | null | error | error | {missing} | NaN | +| | | valid | int32 | int32 | {int32} | as a double | +| long | int64 | null | error | error | {missing} | NaN | +| | | valid | int64 | int64 | {int64} | as a double [N1] | +| datetime | datetime | null [N5] | error | NaT | NaT | NaT | +| | | valid | datetime | datetime | datetime | datetime | +| guid | string | null | error | missing | missing | missing | +| | | valid | string | string | string | string | +| real | double | null | error | NaN | NaN | NaN | +| | | valid | double | double | double | double | +| string | string | N/A [N3] | error | "" | "" | "" | +| | | N/A [N4] | "" | "" | "" | "" | +| | | valid | string | string | string | string | +| timespan | duration | null | error | NaN | NaN | NaN | +| | | valid | duration | duration | duration | duration | +| decimal | double | null | error | NaN | NaN | NaN | +| | | valid | double | double | double | double [N1] | +| dynamic | char [N2] | null | error | {missing} | {missing} | {missing} [N2] | +| | | valid | {char} [N2] | {char} [N2] | {char} [N2] | {char} [N2] | + +| Notes | | +| ----- | ---- | +| [N1] | Subject to loss of precision | +| [N2] | Assuming the value is not decode, see [Dynamics.md](Dynamics.md) | +| [N3] | Kusto does not store null strings, however metadata and commands can return null strings that still need to be converted to tables | +| [N4] | If the allowNullStrings argument is set the the nullPolicy is not applied a warning is issued, this can be used to enable different behavior in queries and commands for example | +| [N5] | When a datetime NaT is returned its timezone is set to UTC as per other datetimes | + +> Note that metadata tables returned along side conventional query results also +> adopt the null policy applied to the query result. + +The `testNulls` test function in `/matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m` +shows some simple queries that can be used to easily return nulls for testing purposes. + +## Null error + +If a null is encountered, in this case a null long/int64 is returned when using a +null policy that does not support it an error such as the following is returned. +In this case a possible solution would be: +`mathworks.adx.run(myQueryString, mathworks.adx.NullPolicy.AllowAll)` +It may be preferable to resolve this issue in the query or the data set such that +the data returned to MATLAB is free of nulls. + +```matlabsession +>> [result, success] = mathworks.adx.run(myQueryString) +Error using mathworks.internal.adx.getRowWithSchema>convert2Int64 (line 237) +int64 null values are not supported when using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (2,18) +Error in mathworks.internal.adx.getRowWithSchema (line 50) + row{colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx); +``` + +>Tip: In the above error message the `(2,18)` indicates that the issue was detected +>in row 2 column 18. + +## References + +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/null-values](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/null-values) + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/OpenAPI.md b/Documentation/OpenAPI.md new file mode 100644 index 0000000..c3647b5 --- /dev/null +++ b/Documentation/OpenAPI.md @@ -0,0 +1,78 @@ +# Azure Data Explorer OpenAPI Spec + +This file documents the process of building the control plane OpenAPI based client. +*It is not expected that end users should need to use or be familiar with this workflow.* + +## Spec download + +See: [https://github.com/microsoft/azure-rest-api-specs/tree/kusto-demo/specification/azure-kusto/resource-manager](https://github.com/microsoft/azure-rest-api-specs/tree/kusto-demo/specification/azure-kusto/resource-manager) + +```bash +git clone https://github.com/Azure/azure-rest-api-specs.git +``` + +## AutoRest + +AutoRest is required to convert the spec from 2.0 to 3 + +### Install AutoRest + +See: [https://github.com/Azure/autorest/blob/main/docs/install/readme.md](https://github.com/Azure/autorest/blob/main/docs/install/readme.md) + +```bash +npm install -g autorest +``` + +### Convert Spec + +Use AutoRest to generate a spec. in v3.0 format + +```bash +cd azure-rest-api-specs/specification/azure-kusto/resource-manager +npx autorest --output-converted-oai3 +``` + +Creates a spec in: `azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable/<2022-11-11>` +where the data is the latest release folder + +## Generate a client using a MATLAB client + +```matlab +% Assuming the Java files have been built using maven +% In the openAPI Code generator package's directory +% cd Software/Java +% !mvn clean package + +% Run startup to configure the package's MATLAB paths +cd Software/MATLAB +startup + +buildControlPlaneClient +``` + +## Generate a client with npx + +Generally this approach is not required or preferred. + +Check openapitools version are at version 6.2.1 or greater. + +```bash +npx @openapitools/openapi-generator-cli version +``` + +```bash +# Change to OpenAPI client generation package directory +# Call the client generator +npx @openapitools/openapi-generator-cli --custom-generator ./Java/target/classes \ + generate -g MATLAB \ + -i /home//git/azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable//kusto.json \ + -o KustoClient --package-name kusto | tee gen.log + ``` + +## Customize the Client + +* For now use find and replace across the generated files to get rid of apiVersion and subscriptionId such that they are no longer inputs and object properties instead. +* Remove "object" as a type in SkuDescription. +* Add auth to `presend()`. + +[//]: # (Copyright 2023-2024 The MathWorks, Inc.) diff --git a/Documentation/Overview.md b/Documentation/Overview.md index 391647a..1e2e2b1 100644 --- a/Documentation/Overview.md +++ b/Documentation/Overview.md @@ -1,4 +1,5 @@ % This document includes the root README.md in the HTML version of the documentation. When viewing the Markdown version,please refer to [../README.md](../README.md) + ```{include} ../README.md :relative-docs: Documentation/ -``` \ No newline at end of file +``` diff --git a/Documentation/Performance.md b/Documentation/Performance.md new file mode 100644 index 0000000..497a540 --- /dev/null +++ b/Documentation/Performance.md @@ -0,0 +1,140 @@ +# Performance + +This package uses the [GSON](https://github.com/google/gson) Java library for +comprehensive JSON parsing, however this can have a performance impact when working +with queries that return large responses. If response times are slow and bandwidth +is not the issue the following should be considered: + +* In general only KQL queries should return sufficient volumes of data to exhibit +query times that dominate the inherent communication time. + +* Return the minimum amount of data. + +* Where convenient to do so structure queries to perform data formatting and +filtering on the server side. This takes advantage of the proximity to the data +and the scale of the Azure Data Explorer platform. + +* Ingesting from files or tables uses binary transfers, typically with optimized +binary parquet files, for larger volumes of data this is far more efficient than +repeated inline ingestion of small amounts of data. + +* Simple JSON responses may be parsed faster using a custom row decoder, see below +for more details. + +* Return int32s rather than int64s if precision is not a limitation. + +* Avoid supporting nulls data if data is know to not have null values. See: +[NullData](NullData.md) for more details. + +* The MATLAB [profiler](https://mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) +can be a good way to visualize what portions of query processing are consuming most time. + +* If responses contain [dynamic](Dynamics.md) fields where not all values returned +may be used consider decoding them at the time of use as needed rather than as +part of the query. + +* If getting direct access to the raw data return in response is required, this +can be accomplished using the lower-level functions. + +## Parallel Processing + +If Parallel Computing Toolbox is installed (use `ver` to check), then it can be +used to speed up the processing of KQL query rows. Use the optional `useParallel` +argument to enable this (default is `false`). Additionally a threshold of rows +can be applied below which Parallel processing will not be used. The default is 1000. +The best value for this threshold will depend on the content of the rows and whether +repeated large row count calls are made, some experimentation may be required. +This can also be used with custom row decoders. The default row decoder requires +a process based parpool. + +Here a parallel processing is enabled along with a custom row decoder, parallelism is applied for +queries returning 10000 rows or more. + +Example: + +```matlab +h = @mathworks.internal.adx.exampleCustomRowDecoder; +[result, success] = mathworks.adx.run(query, useParallel=true, parallelThreshold=10000, customRowDecoder=h); +``` + +## Custom row decoder + +If queries result in a simple JSON response then writing a custom decoder to +extract the required data rather than using the default decoder. + +A sample of such a decoder `/Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m` +is provided. This function handles an array of rows of the form: `[128030544,1.0,"myStringValue-1"]` +with fields of types int64, double and a string. + +It will not process other data and is intended for speed rather than strict correctness or robustness. + +The custom decoder is applied to the PrimaryResult rows field only. + +It is required to return a cell array of size number of rows by the number of +columns that can be converted to a MATLAB table with the given schema. + +It is not required to respect input arguments flags if foreknowledge of returned +data permits it. + +Custom row decoders can be applied to progressive and nonprogressive KQL API v2 +and KQL API v1 mode queries. + +When a custom decoder is not used the generic decoder `mathworks.internal.adxgetRowsWithSchema` +is used. + +A [function handle](https://mathworks.com/help/matlab/matlab_prog/creating-a-function-handle.html) +is used to pass a handle to the custom row decoder to the `run` or `KQLquery` commands. + +Example: + +```matlab +query = sprintf('table("%s", "all")', tableName); +crd = @mathworks.internal.adx.exampleCustomRowDecoder; +[result, success] = mathworks.adx.run(query, customRowDecoder=crd); +``` + +The `exampleCustomRowDecoder` example implements a Parallel Computing based `parfor` +based parallelization, this is not required but may be helpful. + +> Depending on the nature of the decoder code a process based pool may be required +> rather than a thread based pool. +> It is unlikely that a decoding process would benefit from a remote processing via +> a cluster based pool but this would be possible. + +## doNotParse parallel array processing (Experimental) + +A JSON array of `doNotParse` values being processed by `JSONMapper` must be checked +for paired double quotes added to some value types the gson `toString` method. +While trivial this can be slow if there are many elements for example, row values. + +An experimental flag (`useParallel`) can be set to true to enable parallel +processing of this step using `parfor` if Parallel Computing Toolbox is available. +The property can be set in: `/Software/MATLAB/app/system/+adx/+control/JSONMapper.m` +in the `fromJSON` method. + +## Skip parsing row array elements (skipRowsArrayDecode) + +>The following applies to v2 queries only. + +While the Rows array elements are not parsed by the the generation of a `adx.data.models.QueryV2ResponseRaw` +in a `adx.data.api.Query.queryRun` call prior to the generation of a MATLAB table, +as done by the higher-level `mathworks.adx.KQLQuery` function, the array +itself is parsed. + +If the optional named argument `skipRowsArrayDecode` is used with a `adx.data.api.Query.queryRun` +call then the frames are parsed but the Rows array itself is not. This enables +If parsing the Rows independently if needed in a performance optimal way. + +Example: + +```matlab +% Create a request +request = adx.data.models.QueryRequest(); +request.csl = "mytablename | take 100"; + +% Create the Query object and run the request +query = adx.data.api.Query(); +[code, result, response, id] = query.queryRun(request, apiVersion="v2", skipRowsArrayDecode=true); +``` + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/README.md b/Documentation/README.md index 7ff78be..290e4ae 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -6,16 +6,17 @@ ## Contents -* [Overview](../README.md) +* [Overview](Overview.md) * [Installation](Installation.md) * [Configuration](Configuration.md) * [Authentication](Authentication.md) * Service specific documentation - * [Azure Data Lake Storage Gen2](DataLakeStorageGen2.md) - * [Azure Key Vault](KeyVault.md) + * [Azure Data Lake Storage Gen2](DataLakeStorageGen2.md) + * [Azure Key Vault](KeyVault.md) + * [Azure Data Explorer](DataExplorer.md) * [MATLAB Compiler (SDK) Deployment](Deployment.md) * [Full API Reference](APIReference.md) * [FAQ](FAQ.md) * [References](References.md) -[//]: # (Copyright 2021-2022 The MathWorks, Inc.) +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/Documentation/References.md b/Documentation/References.md index 61b46a4..0624b3e 100644 --- a/Documentation/References.md +++ b/Documentation/References.md @@ -4,7 +4,6 @@ In general the MATLAB interfaces follow the same design as the Azure® SDK for Java. Thus it can be helpful to also consult the [Azure SDK for Java documentation](https://docs.microsoft.com/en-us/azure/developer/java/sdk) to learn more about specific client interfaces, methods and authentication workflows. - ## Azure Storage * [Azure SDK for Java Reference Documentation](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-storage-blob/12.8.0/index.html) diff --git a/Documentation/Services.rst b/Documentation/Services.rst deleted file mode 100644 index d54c38e..0000000 --- a/Documentation/Services.rst +++ /dev/null @@ -1,8 +0,0 @@ -Usage Per Service -======================== - -.. toctree:: - :maxdepth: 2 - - DataLakeStorageGen2 - KeyVault \ No newline at end of file diff --git a/Documentation/Testing.md b/Documentation/Testing.md index b747db3..6e98dec 100644 --- a/Documentation/Testing.md +++ b/Documentation/Testing.md @@ -8,6 +8,7 @@ for different Azure services as well as a `Common` directory: * `/Common` * `/KeyVault` * `/Storage` +* `/Adx` The unit tests for the different services may have different requirements. These are documented on a per service basis below. @@ -177,4 +178,4 @@ A Key Vault account needs to exist: | `KEYVAULT_TENANT_ID` | Azure Tenant ID | | `KEYVAULT_VAULT_NAME` | Name of the Key Vault | -[//]: # (Copyright 2021-2023 The MathWorks, Inc.) +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/Documentation/_static/css/mathworks.css b/Documentation/_static/css/mathworks.css new file mode 100644 index 0000000..1f5a0b1 --- /dev/null +++ b/Documentation/_static/css/mathworks.css @@ -0,0 +1,64 @@ +/* Customizations */ +/* Copyright (c) 2020 MathWorks, Inc. */ +div.wy-side-nav-search { + background-color: #0076a8; +} + +/* Headings */ +h1 { + padding: 0 61px 2px 0; + margin-bottom: 16px; + border-bottom: 1px solid #cbcbcb; + background-position: right bottom; + background-repeat: no-repeat; + background-size: 58px; + color: #c45400; + font: normal normal 22px/1.136 Arial,Helvetica,sans-serif; +} + +articleBody span.caption-text { + padding-top: 5px; + margin-bottom: 8px; + color: #404040; + font: normal bold 17px/1.35 Arial, Helvetica, sans-serif; + border-bottom: 1px solid #ccc; +} + +h2, .h2 { + padding-top: 5px; + margin-bottom: 8px; + color: #404040; + font: normal bold 18px/1.35 Arial, Helvetica, sans-serif; + border-bottom: 1px solid #ccc; +} + +h3 { + display: block; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font: normal bold 17px/1.35 Arial, Helvetica, sans-serif; + font-weight: bold; +} + +h4 { + display: block; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font: normal bold 15px/1.35 Arial, Helvetica, sans-serif; + font-weight: bold; +} + + +/* +body { + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +*/ diff --git a/Documentation/conf.py b/Documentation/conf.py index d438f3a..3258ca7 100644 --- a/Documentation/conf.py +++ b/Documentation/conf.py @@ -17,8 +17,8 @@ # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- -project = u'MATLAB Interface for Azure Services Package' -copyright = u'2020-2022, MathWorks, Inc.' +project = u'MATLAB Interface for Azure Services' +copyright = u'2020-2024, MathWorks, Inc.' author = u'MathWorks' # The short X.Y version @@ -55,7 +55,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +#language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -155,7 +155,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'MATLABInterfaceforAzureServices.tex', u'MATLAB Interface for Azure Services Package', + (master_doc, 'MATLABInterfaceforAzureServices.tex', u'MATLAB Interface for Azure Services', u'MathWorks, Inc.', 'manual'), ] @@ -165,7 +165,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'MATLABInterfaceforAzureServices', u'MATLAB Interface for Azure Services Package Documentation', + (master_doc, 'MATLABInterfaceforAzureServices', u'MATLAB Interface for Azure Services Documentation', [author], 1) ] @@ -176,8 +176,8 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'MATLABInterfaceforAzureServices', u'MATLAB Interface for Azure Services Package', - author, 'MATLABInterfaceforAzureServices', 'MATLAB Interface for Azure Services Package', + (master_doc, 'MATLABInterfaceforAzureServices', u'MATLAB Interface for Azure Services', + author, 'MATLABInterfaceforAzureServices', 'MATLAB Interface for Azure Services', 'Miscellaneous'), ] @@ -199,4 +199,9 @@ # A list of files that should not be packed into the epub file. epub_exclude_files = ['search.html'] -myst_heading_anchors = 5 \ No newline at end of file +myst_heading_anchors = 5 + + +suppress_warnings = [ + "myst.header" # Suppress warnings about WARNING: Non-consecutive header level increase; H2 to H4 [myst.header] +] diff --git a/Documentation/html/ADXAuthentication.html b/Documentation/html/ADXAuthentication.html new file mode 100644 index 0000000..47534c1 --- /dev/null +++ b/Documentation/html/ADXAuthentication.html @@ -0,0 +1,263 @@ + + + + + + + Authentication — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Authentication

+

To create a settings file interactively use: mathworks.internal.adx.buildSettingsFile.

+

Template JSON configuration files for various authentication approaches can be +found in matlab-azure-adx/Software/MATLAB/config

+

In general for initial testing Client Secret based authentication is the simplest +to configure an work with. To use other approaches it is recommended to contact +MathWorks®: mwlab@mathworks.com.

+

Certain authentication methods require the additional use of the Azure Java SDK +authentication support as documented in Authentication.md.

+ + + + + + + + + + + + + + + + + + + + + + + + + +

Authentication Method

JSON file field value

Java SDK support required

Client Secret

clientSecret

No

Interactive Browser

interactiveBrowser

Yes

Device Code

deviceCode

Yes

Managed Identity

managedIdentity

Yes

+

If you wish to use an Azure authentication method that is not listed please contact MathWorks at: mwlab@mathworks.com.

+
+

Settings file fields

+

The default settings file is: matlab-azure-adx/Software/MATLAB/config/adx.Client.Settings.json +Alternative names and paths can be used if required. +Depending on the authentication method used different fields are required. The +template files for the documented methods show the fields for the various methods.

+

For example Interactive Browser uses:

+
{
+    "preferredAuthMethod" : "interactiveBrowser",
+    "subscriptionId" : "<REDACTED>",
+    "tenantId" : "<REDACTED>",
+    "clientId" : "<REDACTED>",
+    "database" : "<defaultDatabaseName>",
+    "resourceGroup": "<resourceGroupName>",
+    "cluster" : "https://<defaultClusterName>.<region>.kusto.windows.net"
+}
+
+
+

In use the fields controlBearerToken and dataBearerToken will be added to the file +to cache the short lived bearer token values the control and data planes. These values are sensitive and should not be exposed.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Field name

Description

preferredAuthMethod

Indicated the authentication approach to use, e.g. clientSecret

tenantId

Azure tenant ID

subscriptionId

Azure subscriptions ID

clientId

ID of the Application Registration used to connect to ADX

clientSecret

Secret value corresponding to the clientId, this value is sensitive and should not be exposed

resourceGroup

Azure resource group containing the ADX instance

database

Default database name to use

cluster

Default cluster name to use

+
+
+

Client Secret

+

Client Secret authentication is sometimes referred to as “Application Secret” as the +secrets created apply to Application Registrations. This package uses the term “Client +Secret or clientSecretas appropriate.

+

Client secret does not use the “Secret ID” value and it should not be confused with the +Client ID (sometimes called the App ID) or the Client Secret itself.

+
+
+

BaseClient extension

+

The file matlab-azure-adx/Software/MATLAB/app/system/+adx/+control/BaseClient.m +implements the base client for the interface’s API call classes. +In this file there are well commented hook points to which custom authentication +code can be integrated if required. This topic should be discussed with MathWorks +to clarify is custom code is necessary.

+
+
+

Bearer Tokens

+

The lower-level +api classes and some higher-level functions accept an optional +argument bearerToken directly if the authentication process to obtain the token +is handled by some external means. Note that the KQL queries and management commands +will require different tokens as they use different endpoints.

+
+
+

References

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/ADXGettingStarted.html b/Documentation/html/ADXGettingStarted.html new file mode 100644 index 0000000..760de5f --- /dev/null +++ b/Documentation/html/ADXGettingStarted.html @@ -0,0 +1,670 @@ + + + + + + + Getting Started — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Getting Started

+

Azure Data Explorer (ADX) commands can be broadly separated into two classes:

+
    +
  • Data queries, which transact data on the platform

  • +
  • Control queries, which relate to the platform itself

  • +
+

This document will describe some examples of each and how they are structured. +It does not attempt to cover the complete KQL syntax or all of the control options +that are available. For further detailed refer to the API reference +and Azure’s documentation.

+

The following examples assume that the package has previously been configured with +connection and authentication details, see: ADXAuthentication.

+

The REST API interface used by this package can be somewhat verbose in some cases +once familiar with its behavior it is generally straightforward to create wrapper +functions in MATLAB that more concisely address a task. Some such reference implementations +are provided.

+
+

MathWorks reserves the internal namespace and functions within this namespace +are subject to change or removal without notice and should not be used.

+
+
+

Data queries

+
+

Hello World KQL query

+
+

run command

+

The following reference implementation mathworks.adx.run is a high-level +wrapper that abstracts the different types of queries under a generic run method. +For more advanced use cases it may be required to drop to the lower-level interfaces +described below.

+

The query requests that “Hello World” be printed. This is returned as a table with +a column names “mycol”. the success value is a logical indicating success of the +call or not, additional optional outputs are not displayed in this example:

+
>> [result, success] = mathworks.adx.run('print mycol="Hello World"')
+result =
+  table
+        mycol    
+    _____________
+    "Hello World"
+success =
+  logical
+   1
+
+
+

To get the contents of an entire table once can run the following command, here Parallel +processing of the resulting data has been enabled (if available), with a threshold +of 10000 rows of data. For more details on optimization see: Performance.md.

+
[result, success] = mathworks.adx.run('table("tableName", "all")', , useParallel=true, parallelThreshold=10000)
+
+
+
+
+

KQLQuery command

+

At a lower-level the above run command in this case calls the KQLQuery reference +implementation, here we also display the requestId which can be used for corelation:

+
>> [result, success, requestId] = mathworks.adx.KQLQuery('print mycol="Hello World"')
+
+result =
+  table
+        mycol    
+    _____________
+    "Hello World"
+
+success =
+  logical
+   1
+
+requestId = 
+    "4faa0b41-e308-4436-a113-376aa20da525"
+
+
+
+
+

REST interface

+

At a still lower-level one can work with the REST interface more directly. +A adx.data.models.QueryRequest request object is first created. The .db property +is configured with the database name of interest. If not provided a default, if set, +will be read from the configuration file. The query itself print Test="Hello World" +is assigned to the .csl property. In this case no request properties are assigned +to the propertiesProp property. This will be used in a later example.

+
% build a request object
+req = adx.data.models.Query
+Request;
+req.db = "mydatabasename";
+req.csl = 'print Test="Hello World"'
+req = 
+QueryRequest with properties:
+
+             csl: "print mycol="Hello World""
+              db: "mydatabasename"
+  propertiesProp: []
+
+
+

The ADX cluster is assigned and with it a default scope. A default cluster and scope +can be set in the configuration to avoid setting them for exact query and or having +the values appear in source code. The ADX configuration may require that multiple +scopes would be set.

+
% Configure a cluster and scope, defaults to be read from configuration files in future
+cluster = "https://myclustername.myregion.kusto.windows.net";
+scopes = ["https://myclustername.myregion.kusto.windows.net/.default"];
+
+
+

Now a adx.data.api.Query query object is created using the scope(s).

+
% Create a query object
+query = adx.data.api.Query('scopes', scopes);
+query = 
+Query with properties:
+
+            serverUri: [0×0 matlab.net.URI]
+          httpOptions: [1×1 matlab.net.http.HTTPOptions]
+  preferredAuthMethod: [0×0 string]
+          bearerToken: '<unset>'
+               apiKey: '<unset>'
+      httpCredentials: '<unset>'
+           apiVersion: "2022-11-11"
+       subscriptionId: '<redacted>'
+             tenantId: '<redacted>'
+         clientSecret: '<redacted>'
+             clientId: '<redacted>'
+               scopes: "https://myclustername.myregion.kusto.windows.net/.default"
+              cookies: [1×1 adx.CookieJar]
+
+
+

Having configured the query object it can now be run the request that was previously +created on a given cluster, if a default is not used:

+
[code, result, response] = query.queryRun(req, cluster)
+
+code = 
+  StatusCode enumeration
+    OK
+result = 
+  1×5 QueryV2ResponseRaw array with properties:
+
+    FrameType
+    Version
+    IsProgressive
+    TableId
+    TableKind
+    TableName
+    Columns
+    Rows
+    HasErrors
+    Cancelled
+    OneApiErrors
+
+response = 
+  ResponseMessage with properties:
+
+    StatusLine: 'HTTP/1.1 200 OK'
+    StatusCode: OK
+        Header: [1×11 matlab.net.http.HeaderField]
+          Body: [1×1 matlab.net.http.MessageBody]
+     Completed: 0
+
+
+

Assuming success the result is a number of Frames that describe and contain tabular data. +This data can be converted to native MATLAB tables for ease of use. +Three tables are returned 2 containing metadata and a 3rd containing the data of, +interest, it is named the PrimaryResult.

+
tables = mathworks.internal.adx.queryV2Response2Tables(result)
+tables =
+  3×1 cell array
+    {1×3  table}
+    {1×1  table}
+    {3×12 table}
+>> tables{1}.Properties.Description
+ans =
+    '@ExtendedProperties'
+>> tables{2}.Properties.Description
+ans =
+    'PrimaryResult'
+>> tables{3}.Properties.Description
+ans =
+    'QueryCompletionInformation'
+>> tables
+
+
+

Looking at the PrimaryResult shows the response to the query:

+
>> tables{2}
+ans =
+  table
+         mycol      
+    _______________
+    "Hello World"
+
+
+

Putting the commands together:

+
% build a request object
+request = adx.data.models.QueryRequest();
+colName = "myOutput";
+message = "Hello World";
+% set the KQL query
+request.csl = sprintf('print %s="%s"', colName, message);
+% Don't set the database use the default in .json config file
+% request.db = "myDatabaseName"
+% No adx.data.models.ClientRequestProperties required
+% request.requestProperties
+% Create the Query object and run the request
+query = adx.data.api.Query();
+% The default cluster to use is configured using a .json configuration file
+% Run the query:
+[code, result, response] = query.queryRun(request); %#ok<ASGLU>
+if code == matlab.net.http.StatusCode.OK
+    % Convert the response to Tables
+    hwTable = mathworks.internal.adx.queryV2Response2Tables(result);
+    fprintf("Query (%s) result:\n", request.csl);
+    disp(hwTable);
+else
+    error('Error running query: %s', request.csl);
+end
+
+
+
+
+
+

Configuring request properties, to use tSQL using the low-level interface

+

The higher-level interface mathworks.adx.tSQLQuery automatically configures +the required request property to enable tSQL. However, as an example of how properties +can be configured directly using the lower level the following example is illustrative. +Note the KQLQuery and run commands both accept properties as optional arguments.

+

If not using the KQL language syntax the the T-SQL syntax can be used to write +queries. This is accomplished the query property query_language to sql.

+
request = adx.data.models.QueryRequest();
+request.csl = query;
+% Don't set the database use the default in .json config file
+% request.db = "databaseName";
+
+% Configure ClientRequestPropertiesOptions & then ClientRequestProperties
+crpo = adx.data.models.ClientRequestPropertiesOptions;
+crpo.query_language = "sql";
+crp = adx.data.models.ClientRequestProperties();
+crp.Options = crpo;
+request.requestProperties = crp;
+
+% Create the Query object and run the request
+query = adx.data.api.Query();
+[code, result, response] = query.queryRun(request);
+
+
+

A reference implementation shows how this can be more concisely used:

+
% Run the SQL query 'SELECT top(10) * FROM mytable' to return the 1st 10 row of a table
+[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.tSQLQuery('SELECT top(10) * FROM mytable')
+
+
+

The additional return values can be used to indicate if the query failed:

+
if dataSetCompletion.HasErrors || dataSetCompletion.Cancelled
+    error("Query had errors or was cancelled");
+end
+
+
+
+
+

Count the rows in a table, using the lower level interfaces

+

A query to count the rows in a table using KQL syntax:

+
req = adx.data.models.QueryRequest;
+req.csl = "['mytable'] | count";
+
+q = adx.data.api.Query();
+[code, result, response] = q.queryRun(req); %#ok<ASGLU>
+if code == matlab.net.http.StatusCode.OK
+    [result, resultTables] = mathworks.internal.adx.queryV2Response2Tables(result);
+    count = result.Count;
+end
+
+
+

In more detail, this example is based on a table created from the airlinesmall.csv +data set that is included with matlab use which('airlinesmall.csv') to get its +location. The result returned should be: 123523.

+
+

Note that in early releases some warnings about unsupported data types and conversions may be expected.

+
+
% Create a request
+req = adx.ModelsDataPlane.QueryRequest;
+req.db = "mydatabasename";
+% The table name is: airlinesmallcsv;
+% Kusto query string to count the rows in a given table
+req.csl = "['airlinesmallcsv'] | count";
+
+scopes = ["https://myclustername.myregion.kusto.windows.net/.default"];
+cluster = "https://myclustername.myregion.kusto.windows.net";
+
+q = adx.data.api.Query('scopes', scopes);
+[code, result, response] = queryRun(q, req, cluster);
+
+tables =
+  3×1 cell array
+    {1×3  table}
+    {1×1  table}
+    {3×12 table}
+ans =
+  table
+    Count 
+    ______
+    123523
+c =
+  int64
+   123523
+ans =
+    'int64'
+
+
+
+
+

Progressive query execution

+

To execute a query in progressive mode the query request option property results_progressive_enabled +should be set to true.

+
query = "['tableName '] | take " + 100;
+args = {"database", database "propertyNames", "results_progressive_enabled", "propertyValues", {true}, "verbose", false};
+[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:});
+
+
+
+
+

Get a list of tables

+

Get a list of tables and table properties:

+
req = adx.data.models.QueryRequest('db', 'mydatabase', 'csl', '.show tables details');
+[code, result, response] = q.queryRun(req);
+
+
+

Or more concisely:

+
tableList = mathworks.adx.listTables(database="mydatabase")
+
+
+
+
+

Export data to a local parquet file

+

The following example code exports an entire table to a known blob using +a Shared Access Signature blob URL. The resulting parquet file can be read +into a MATLAB table using parquetread. Parquet is recommended over CSV and +other formats for speed and data integrity reasons.

+
exportURL = "https://myaccount.blob.core.windows.net/<REDACTED>";
+exportURI = matlab.net.URI(exportURL);
+SAS = exportURI.EncodedQuery;
+query = "table('mytableName', 'all')";
+[tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query);
+if ~tf
+    error("exportToBlob failed");
+end
+
+downloadURL = result.Path(1) + "?" + SAS;
+downloadURI = matlab.net.URI(downloadURL);
+localFile = websave("exportedTable.gz.parquet", downloadURI);
+T = parquetread(localFile);
+
+
+
+
+

Ingest a table from a local a table

+

To ingest large volumes of data from MATLAB then the ingestFile and ingestTable +functions can be used:

+
% Read some sample data from a parquet file to create a MATLAB table
+inputTable = parquetread(parquetFile);
+% Ingest the table into a given table
+[success, result] =  mathworks.adx.ingestTable(inputTable, tableName=tableName);
+
+
+

To ingest small amounts of data from a MATLAB variable, typically a table the +ingestInline. This function is not suitable for bulk data or high performance +requirements.

+
localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet");
+tableName = "outages";
+praquetTable = parquetread(localPath);
+ingestData = praquetTable(1,:);
+
+[success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData)
+
+success =
+  logical
+   1
+result =
+  1x5 table
+                   ExtentId                                    ItemLoaded                      Duration    HasErrors                 OperationId              
+    ______________________________________    _____________________________________________    ________    _________    ______________________________________
+    "8de6b799-6e12-4994-b57b-ed75e15db0a8"    "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf"    00:00:00      false      "cd4184ca-0d31-4c42-a273-5f2953f76ddf"
+requestId = 
+    "63bb1cea-b589-45ac-82ad-00d68ca96aeb"
+extentId = 
+    "8de6b799-6e12-4994-b57b-ed75e15db0a8"
+
+
+

To ingest from another source in ADX itself rather than MATLAB see ingestFromQuery.

+
+
+

Higher-level data handling functions

+

The following higher-level functions are provided to assist in common operations when working with data. +Use doc mathworks.adx.<function-name> for more details.

+
    +
  • createTable - Creates a table in a given database

  • +
  • dropTable - Drops a table from a given database

  • +
  • exportToBlob - Exports data to an Azure blob

  • +
  • ingestFile - Ingests a local file to Azure Data Explorer using Azure blob

  • +
  • ingestFileQueue - Ingests a local file to Azure Data Explorer using Azure blob & queue (work in progress, do not use)

  • +
  • ingestTable - Ingests a MATLAB table to an Azure Data Explorer Table

  • +
  • ingestTableQueue - Ingests a MATLAB table to an Azure Data Explorer Table (work in progress, do not use)

  • +
  • ingestInline - Ingests limited amounts of data into Kusto directly from MATLAB

  • +
  • ingestFromQuery - Ingest data using the result of a command or query

  • +
  • listTables - Returns a list of tables and their properties

  • +
  • tableExists - Returns true is a given table exists

  • +
+
+
+
+

Control queries

+
+

List Clusters

+

Start by creating a Clusters object:

+
>> clusters = adx.Api.Clusters
+clusters = 
+  Clusters with properties:
+
+              serverUri: [0×0 matlab.net.URI]
+            httpOptions: [1×1 matlab.net.http.HTTPOptions]
+    preferredAuthMethod: [0×0 string]
+            bearerToken: '<unset>'
+                 apiKey: '<unset>'
+        httpCredentials: '<unset>'
+             apiVersion: "2022-11-11"
+         subscriptionId: '<redacted>'
+               tenantId: '<redacted>'
+           clientSecret: '<redacted>'
+               clientId: '<redacted>'
+                cookies: [1×1 adx.CookieJar]
+
+
+

Call the clustersList method:

+
>> [code, result, response] = clusters.clustersList
+code = 
+  StatusCode enumeration
+    OK
+result = 
+  ClusterListResult with properties:
+
+    value: [1×1 adx.Models.Cluster]
+response = 
+  ResponseMessage with properties:
+
+    StatusLine: 'HTTP/1.1 200 OK'
+    StatusCode: OK
+        Header: [1×13 matlab.net.http.HeaderField]
+          Body: [1×1 matlab.net.http.MessageBody]
+     Completed: 0
+
+
+

Examine the result, in this case there is one cluster:

+
>> result.value
+ans = 
+  Cluster with properties:
+
+            sku: [1×1 adx.Models.AzureSku]
+     systemData: [0×0 adx.Models.systemData]
+          zones: "1"
+       identity: [1×1 adx.Models.Identity]
+    xproperties: [1×1 adx.Models.ClusterProperties_1]
+           etag: ""2023-01-04T12:40:35.3452388Z""
+             id: "/subscriptions/06<REDACTED>74/resourceGroups/mbadx/providers/Microsoft.Kusto/Clusters/myclustername"
+           name: "myclustername"
+           type: "Microsoft.Kusto/Clusters"
+
+>> result.value.sku
+ans = 
+  AzureSku with properties:
+
+        name: Dev_No_SLA_Standard_E2a_v4
+    capacity: 1
+        tier: Basic
+
+
+
+

The [tf, cluster] = mathworks.adx.isClusterRunning(...) command is a convenient function to +easily determine if a default or given cluster is running or not.

+
+
+
+

Management

+
% Get Identity token
+m = adx.data.api.Management('scopes', dataPlaneScopes)
+req = adx.data.models.ManagementRequest 
+req.csl = '.get kusto identity token'
+ingestCluster = "https://ingest-myadxcluster.westeurope.kusto.windows.net"
+[code, result, response] = m.managementRun(req, ingestCluster)
+
+q = adx.data.api.Ingest()
+
+
+

More concisely using configured defaults:

+
m = adx.data.api.Management()
+req = adx.data.models.ManagementRequest
+req.csl = '.get kusto identity token'
+[code, result, response] = m.managementRun(req)
+
+
+
+
+
+

References

+

For more sample commands see:

+
    +
  • Example code: Software/MATLAB/adxDemo.m

  • +
  • Basic test code: Software/MATLAB/test/unit/*.m

  • +
+

For further API reference information see:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/APIReference.html b/Documentation/html/APIReference.html new file mode 100644 index 0000000..4ab80e9 --- /dev/null +++ b/Documentation/html/APIReference.html @@ -0,0 +1,20712 @@ + + + + + + + MATLAB Interface for Azure Services - API Reference — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • »
  • +
  • MATLAB Interface for Azure Services - API Reference
  • +
  • + Edit on GitHub +
  • +
+
+
+
+
+ +
+

MATLAB Interface for Azure Services - API Reference

+

Classes, methods and functions that include the terms private or internal in their namespace should not be used directly. +They are subject to change or removal without notice. +The majority of adx.control APIs are generated using OpenAPI. see: OpenAPI.md

+
+

Index

+ +
+
+

Help

+
+

adx

+
+
+

adx.control

+
+
+

adx.control.api

+
+
+

adx.control.api.AttachedDatabaseConfigurations

+

Superclass: adx.control.BaseClient

+
AttachedDatabaseConfigurations No description provided
+ 
+  AttachedDatabaseConfigurations Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  AttachedDatabaseConfigurations Methods:
+ 
+    AttachedDatabaseConfigurations - Constructor
+    attachedDatabaseConfigurationsCheckNameAvailability - 
+    attachedDatabaseConfigurationsCreateOrUpdate - 
+    attachedDatabaseConfigurationsDelete - 
+    attachedDatabaseConfigurationsGet - 
+    attachedDatabaseConfigurationsListByCluster - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.AttachedDatabaseConfigurations

+
AttachedDatabaseConfigurations Constructor, creates a AttachedDatabaseConfigurations instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.AttachedDatabaseConfigurations();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.AttachedDatabaseConfigurations("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.AttachedDatabaseConfigurations("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.AttachedDatabaseConfigurations("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCheckNameAvailability

+
attachedDatabaseConfigurationsCheckNameAvailability No summary provided
+  Checks that the attached database configuration resource name is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    AttachedDatabaseConfigurationsCheckNameRequest - The name of the resource., Type: AttachedDatabaseConfigurationsCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCreateOrUpdate

+
attachedDatabaseConfigurationsCreateOrUpdate No summary provided
+  Creates or updates an attached database configuration.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    AttachedDatabaseConfiguration - The database parameters supplied to the CreateOrUpdate operation., Type: AttachedDatabaseConfiguration
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            location
+            xproperties
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the database.
+    201: Successfully created the database.
+    202: Accepted the create database request.
+    0: Error response describing why the operation failed.
+ 
+  Returns: AttachedDatabaseConfiguration
+ 
+  See Also: adx.control.models.AttachedDatabaseConfiguration
+
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsDelete

+
attachedDatabaseConfigurationsDelete No summary provided
+  Deletes the attached database configuration with the given name.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully deleted the database.
+    202: Accepted.
+    204: The specified database does not exist.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsGet

+
attachedDatabaseConfigurationsGet No summary provided
+  Returns an attached database configuration.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the specified attached database configuration.
+    0: Error response describing why the operation failed.
+ 
+  Returns: AttachedDatabaseConfiguration
+ 
+  See Also: adx.control.models.AttachedDatabaseConfiguration
+
+
+
+
+

adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsListByCluster

+
attachedDatabaseConfigurationsListByCluster No summary provided
+  Returns the list of attached database configurations of the given Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the list of attached database configurations.
+    0: Error response describing why the operation failed.
+ 
+  Returns: AttachedDatabaseConfigurationListResult
+ 
+  See Also: adx.control.models.AttachedDatabaseConfigurationListResult
+
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments

+

Superclass: adx.control.BaseClient

+
ClusterPrincipalAssignments No description provided
+ 
+  ClusterPrincipalAssignments Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  ClusterPrincipalAssignments Methods:
+ 
+    ClusterPrincipalAssignments - Constructor
+    clusterPrincipalAssignmentsCheckNameAvailability - 
+    clusterPrincipalAssignmentsCreateOrUpdate - 
+    clusterPrincipalAssignmentsDelete - 
+    clusterPrincipalAssignmentsGet - 
+    clusterPrincipalAssignmentsList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.ClusterPrincipalAssignments

+
ClusterPrincipalAssignments Constructor, creates a ClusterPrincipalAssignments instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.ClusterPrincipalAssignments();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.ClusterPrincipalAssignments("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.ClusterPrincipalAssignments("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.ClusterPrincipalAssignments("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCheckNameAvailability

+
clusterPrincipalAssignmentsCheckNameAvailability No summary provided
+  Checks that the principal assignment name is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    ClusterPrincipalAssignmentCheckNameRequest - The name of the principal assignment., Type: ClusterPrincipalAssignmentCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCreateOrUpdate

+
clusterPrincipalAssignmentsCreateOrUpdate No summary provided
+  Create a Kusto cluster principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+    ClusterPrincipalAssignment - The Kusto cluster principalAssignment''s parameters supplied for the operation., Type: ClusterPrincipalAssignment
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            xproperties
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the PrincipalAssignment.
+    201: Successfully created the principalAssignment.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ClusterPrincipalAssignment
+ 
+  See Also: adx.control.models.ClusterPrincipalAssignment
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsDelete

+
clusterPrincipalAssignmentsDelete No summary provided
+  Deletes a Kusto cluster principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- principalAssignments deleted successfully.
+    202: Accepted the delete principalAssignments request.
+    204: NoContent -- principalAssignments does not exist in the subscription.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsGet

+
clusterPrincipalAssignmentsGet No summary provided
+  Gets a Kusto cluster principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The Kusto cluster principal assignment object.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ClusterPrincipalAssignment
+ 
+  See Also: adx.control.models.ClusterPrincipalAssignment
+
+
+
+
+

adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsList

+
clusterPrincipalAssignmentsList No summary provided
+  Lists all Kusto cluster principalAssignments.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ClusterPrincipalAssignmentListResult
+ 
+  See Also: adx.control.models.ClusterPrincipalAssignmentListResult
+
+
+
+
+
+

adx.control.api.Clusters

+

Superclass: adx.control.BaseClient

+
Clusters No description provided
+ 
+  Clusters Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  Clusters Methods:
+ 
+    Clusters - Constructor
+    clustersAddLanguageExtensions - 
+    clustersCheckNameAvailability - 
+    clustersCreateOrUpdate - 
+    clustersDelete - 
+    clustersDetachFollowerDatabases - 
+    clustersDiagnoseVirtualNetwork - 
+    clustersGet - 
+    clustersList - 
+    clustersListByResourceGroup - 
+    clustersListFollowerDatabases - 
+    clustersListLanguageExtensions - 
+    clustersListSkusByResource - 
+    clustersMigrate - 
+    clustersRemoveLanguageExtensions - 
+    clustersStart - 
+    clustersStop - 
+    clustersUpdate - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.Clusters.Clusters

+
Clusters Constructor, creates a Clusters instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.Clusters();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.Clusters("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.Clusters("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.Clusters("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.Clusters.clustersAddLanguageExtensions

+
clustersAddLanguageExtensions No summary provided
+  Add a list of language extensions that can run within KQL queries.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    LanguageExtensionsList - The language extensions to add., Type: LanguageExtensionsList
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            value
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersCheckNameAvailability

+
clustersCheckNameAvailability No summary provided
+  Checks that the cluster name is valid and is not already in use.
+ 
+  Required parameters:
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    location - The name of Azure region., Type: string
+    ClusterCheckNameRequest - The name of the cluster., Type: ClusterCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.Clusters.clustersCreateOrUpdate

+
clustersCreateOrUpdate No summary provided
+  Create or update a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    Cluster - The Kusto cluster parameters supplied to the CreateOrUpdate operation., Type: Cluster
+        Required properties in the model for this call:
+            sku
+        Optional properties in the model for this call:
+            systemData
+            zones
+            identity
+            xproperties
+            etag
+ 
+  Optional name-value parameters:
+    If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string
+    If_None_Match - Set to ''*'' to allow a new cluster to be created, but to prevent updating an existing cluster. Other values will result in a 412 Pre-condition Failed response., Type: string
+ 
+  Responses:
+    200: Successfully updated the Cluster.
+    201: Successfully created the cluster.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Cluster
+ 
+  See Also: adx.control.models.Cluster
+
+
+
+
+

adx.control.api.Clusters.clustersDelete

+
clustersDelete No summary provided
+  Deletes a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- cluster deleted successfully.
+    202: Accepted the delete cluster request.
+    204: NoContent -- cluster does not exist in the subscription.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersDetachFollowerDatabases

+
clustersDetachFollowerDatabases No summary provided
+  Detaches all followers of a database owned by this cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    FollowerDatabaseDefinition - The follower databases properties to remove., Type: FollowerDatabaseDefinition
+        Required properties in the model for this call:
+            clusterResourceId
+            attachedDatabaseConfigurationName
+        Optional properties in the model for this call:
+            databaseName
+            tableLevelSharingProperties
+            databaseShareOrigin
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersDiagnoseVirtualNetwork

+
clustersDiagnoseVirtualNetwork No summary provided
+  Diagnoses network connectivity status for external resources on which the service is dependent on.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: DiagnoseVirtualNetworkResult
+ 
+  See Also: adx.control.models.DiagnoseVirtualNetworkResult
+
+
+
+
+

adx.control.api.Clusters.clustersGet

+
clustersGet No summary provided
+  Gets a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The Kusto cluster.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Cluster
+ 
+  See Also: adx.control.models.Cluster
+
+
+
+
+

adx.control.api.Clusters.clustersList

+
clustersList No summary provided
+  Lists all Kusto clusters within a subscription.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ClusterListResult
+ 
+  See Also: adx.control.models.ClusterListResult
+
+
+
+
+

adx.control.api.Clusters.clustersListByResourceGroup

+
clustersListByResourceGroup No summary provided
+  Lists all Kusto clusters within a resource group.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ClusterListResult
+ 
+  See Also: adx.control.models.ClusterListResult
+
+
+
+
+

adx.control.api.Clusters.clustersListFollowerDatabases

+
clustersListFollowerDatabases No summary provided
+  Returns a list of databases that are owned by this cluster and were followed by another cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the list of followed databases.
+    0: Error response describing why the operation failed.
+ 
+  Returns: FollowerDatabaseListResult
+ 
+  See Also: adx.control.models.FollowerDatabaseListResult
+
+
+
+
+

adx.control.api.Clusters.clustersListLanguageExtensions

+
clustersListLanguageExtensions No summary provided
+  Returns a list of language extensions that can run within KQL queries.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the list of language extensions.
+    0: Error response describing why the operation failed.
+ 
+  Returns: LanguageExtensionsList
+ 
+  See Also: adx.control.models.LanguageExtensionsList
+
+
+
+
+

adx.control.api.Clusters.clustersListSkusByResource

+
clustersListSkusByResource No summary provided
+  Returns the SKUs available for the provided resource.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ListResourceSkusResult
+ 
+  See Also: adx.control.models.ListResourceSkusResult
+
+
+
+
+

adx.control.api.Clusters.clustersMigrate

+
clustersMigrate No summary provided
+  Migrate data from a Kusto cluster to another cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    ClusterMigrateRequest - The cluster migrate request parameters., Type: ClusterMigrateRequest
+        Required properties in the model for this call:
+            clusterResourceId
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersRemoveLanguageExtensions

+
clustersRemoveLanguageExtensions No summary provided
+  Remove a list of language extensions that can run within KQL queries.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    LanguageExtensionsList - The language extensions to remove., Type: LanguageExtensionsList
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            value
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersStart

+
clustersStart No summary provided
+  Starts a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersStop

+
clustersStop No summary provided
+  Stops a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Clusters.clustersUpdate

+
clustersUpdate No summary provided
+  Update a Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    ClusterUpdate - The Kusto cluster parameters supplied to the Update operation., Type: ClusterUpdate
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            tags
+            location
+            sku
+            identity
+            xproperties
+ 
+  Optional name-value parameters:
+    If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string
+ 
+  Responses:
+    200: Successfully updated the Cluster.
+    201: Successfully updated the cluster.
+    202: Successfully updated the cluster.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Cluster
+ 
+  See Also: adx.control.models.Cluster
+
+
+
+
+
+

adx.control.api.DataConnections

+

Superclass: adx.control.BaseClient

+
DataConnections No description provided
+ 
+  DataConnections Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  DataConnections Methods:
+ 
+    DataConnections - Constructor
+    dataConnectionsCheckNameAvailability - 
+    dataConnectionsCreateOrUpdate - 
+    dataConnectionsDataConnectionValidation - 
+    dataConnectionsDelete - 
+    dataConnectionsGet - 
+    dataConnectionsListByDatabase - 
+    dataConnectionsUpdate - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.DataConnections.DataConnections

+
DataConnections Constructor, creates a DataConnections instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.DataConnections();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.DataConnections("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.DataConnections("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.DataConnections("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsCheckNameAvailability

+
dataConnectionsCheckNameAvailability No summary provided
+  Checks that the data connection name is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    DataConnectionCheckNameRequest - The name of the data connection., Type: DataConnectionCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the Kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsCreateOrUpdate

+
dataConnectionsCreateOrUpdate No summary provided
+  Creates or updates a data connection.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    dataConnectionName - The name of the data connection., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DataConnection - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnection
+        Required properties in the model for this call:
+            kind
+        Optional properties in the model for this call:
+            location
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the data connection.
+    201: Successfully created the data connection.
+    202: Accepted the create data connection request.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DataConnection
+ 
+  See Also: adx.control.models.DataConnection
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsDataConnectionValidation

+
dataConnectionsDataConnectionValidation No summary provided
+  Checks that the data connection parameters are valid.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    DataConnectionValidation - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnectionValidation
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            dataConnectionName
+            xproperties
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    202: Accepted
+    0: Error response describing why the operation failed.
+ 
+  Returns: DataConnectionValidationListResult
+ 
+  See Also: adx.control.models.DataConnectionValidationListResult
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsDelete

+
dataConnectionsDelete No summary provided
+  Deletes the data connection with the given name.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    dataConnectionName - The name of the data connection., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully deleted the data connection.
+    202: Accepted.
+    204: The specified data connection does not exist.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsGet

+
dataConnectionsGet No summary provided
+  Returns a data connection.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    dataConnectionName - The name of the data connection., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the specified data connection.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DataConnection
+ 
+  See Also: adx.control.models.DataConnection
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsListByDatabase

+
dataConnectionsListByDatabase No summary provided
+  Returns the list of data connections of the given Kusto database.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the list of data connections.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DataConnectionListResult
+ 
+  See Also: adx.control.models.DataConnectionListResult
+
+
+
+
+

adx.control.api.DataConnections.dataConnectionsUpdate

+
dataConnectionsUpdate No summary provided
+  Updates a data connection.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    dataConnectionName - The name of the data connection., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DataConnection - The data connection parameters supplied to the Update operation., Type: DataConnection
+        Required properties in the model for this call:
+            kind
+        Optional properties in the model for this call:
+            location
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the data connection.
+    201: Successfully updated the data connection.
+    202: Accepted the update data connection request.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DataConnection
+ 
+  See Also: adx.control.models.DataConnection
+
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments

+

Superclass: adx.control.BaseClient

+
DatabasePrincipalAssignments No description provided
+ 
+  DatabasePrincipalAssignments Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  DatabasePrincipalAssignments Methods:
+ 
+    DatabasePrincipalAssignments - Constructor
+    databasePrincipalAssignmentsCheckNameAvailability - 
+    databasePrincipalAssignmentsCreateOrUpdate - 
+    databasePrincipalAssignmentsDelete - 
+    databasePrincipalAssignmentsGet - 
+    databasePrincipalAssignmentsList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.DatabasePrincipalAssignments

+
DatabasePrincipalAssignments Constructor, creates a DatabasePrincipalAssignments instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.DatabasePrincipalAssignments();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.DatabasePrincipalAssignments("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.DatabasePrincipalAssignments("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.DatabasePrincipalAssignments("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCheckNameAvailability

+
databasePrincipalAssignmentsCheckNameAvailability No summary provided
+  Checks that the database principal assignment is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    DatabasePrincipalAssignmentCheckNameRequest - The name of the resource., Type: DatabasePrincipalAssignmentCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCreateOrUpdate

+
databasePrincipalAssignmentsCreateOrUpdate No summary provided
+  Creates a Kusto cluster database principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DatabasePrincipalAssignment - The Kusto principalAssignments parameters supplied for the operation., Type: DatabasePrincipalAssignment
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            xproperties
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the PrincipalAssignments.
+    201: Successfully created the principalAssignments.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalAssignment
+ 
+  See Also: adx.control.models.DatabasePrincipalAssignment
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsDelete

+
databasePrincipalAssignmentsDelete No summary provided
+  Deletes a Kusto principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- principalAssignments deleted successfully.
+    202: Accepted the delete principalAssignments request.
+    204: NoContent -- principalAssignments does not exist in the subscription.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsGet

+
databasePrincipalAssignmentsGet No summary provided
+  Gets a Kusto cluster database principalAssignment.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    principalAssignmentName - The name of the Kusto principalAssignment., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The Kusto cluster database principal assignment object.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalAssignment
+ 
+  See Also: adx.control.models.DatabasePrincipalAssignment
+
+
+
+
+

adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsList

+
databasePrincipalAssignmentsList No summary provided
+  Lists all Kusto cluster database principalAssignments.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalAssignmentListResult
+ 
+  See Also: adx.control.models.DatabasePrincipalAssignmentListResult
+
+
+
+
+
+

adx.control.api.Databases

+

Superclass: adx.control.BaseClient

+
Databases No description provided
+ 
+  Databases Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  Databases Methods:
+ 
+    Databases - Constructor
+    databaseInviteFollower - 
+    databasesAddPrincipals - 
+    databasesCheckNameAvailability - 
+    databasesCreateOrUpdate - 
+    databasesDelete - 
+    databasesGet - 
+    databasesListByCluster - 
+    databasesListPrincipals - 
+    databasesRemovePrincipals - 
+    databasesUpdate - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.Databases.Databases

+
Databases Constructor, creates a Databases instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.Databases();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.Databases("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.Databases("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.Databases("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.Databases.databaseInviteFollower

+
databaseInviteFollower No summary provided
+  Generates an invitation token that allows attaching a follower database to this database.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DatabaseInviteFollowerRequest - The follower invitation request parameters., Type: DatabaseInviteFollowerRequest
+        Required properties in the model for this call:
+            inviteeEmail
+        Optional properties in the model for this call:
+            tableLevelSharingProperties
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabaseInviteFollowerResult
+ 
+  See Also: adx.control.models.DatabaseInviteFollowerResult
+
+
+
+
+

adx.control.api.Databases.databasesAddPrincipals

+
databasesAddPrincipals No summary provided
+  Add Database principals permissions.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DatabasePrincipalListRequest - List of database principals to add., Type: DatabasePrincipalListRequest
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            value
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Successfully added the list of database principals. Returns the updated list of principals.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalListResult
+ 
+  See Also: adx.control.models.DatabasePrincipalListResult
+
+
+
+
+

adx.control.api.Databases.databasesCheckNameAvailability

+
databasesCheckNameAvailability No summary provided
+  Checks that the databases resource name is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    CheckNameRequest - The name of the resource., Type: CheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.Databases.databasesCreateOrUpdate

+
databasesCreateOrUpdate No summary provided
+  Creates or updates a database.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    Database - The database parameters supplied to the CreateOrUpdate operation., Type: Database
+        Required properties in the model for this call:
+            kind
+        Optional properties in the model for this call:
+            location
+ 
+  Optional name-value parameters:
+    callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string
+ 
+  Responses:
+    200: Successfully updated the database.
+    201: Successfully created the database.
+    202: Accepted the create database request.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Database
+ 
+  See Also: adx.control.models.Database
+
+
+
+
+

adx.control.api.Databases.databasesDelete

+
databasesDelete No summary provided
+  Deletes the database with the given name.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully deleted the database.
+    202: Accepted.
+    204: The specified database does not exist.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.Databases.databasesGet

+
databasesGet No summary provided
+  Returns a database.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the specified database.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Database
+ 
+  See Also: adx.control.models.Database
+
+
+
+
+

adx.control.api.Databases.databasesListByCluster

+
databasesListByCluster No summary provided
+  Returns the list of databases of the given Kusto cluster.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  Optional name-value parameters:
+    top - limit the number of results, Type: int32, Format: int32
+    skiptoken - Skiptoken is only used if a previous operation returned a partial result. If a previous response contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that specifies a starting point to use for subsequent calls., Type: string
+ 
+  Responses:
+    200: Successfully retrieved the list of databases.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabaseListResult
+ 
+  See Also: adx.control.models.DatabaseListResult
+
+
+
+
+

adx.control.api.Databases.databasesListPrincipals

+
databasesListPrincipals No summary provided
+  Returns a list of database principals of the given Kusto cluster and database.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the list of database principals.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalListResult
+ 
+  See Also: adx.control.models.DatabasePrincipalListResult
+
+
+
+
+

adx.control.api.Databases.databasesRemovePrincipals

+
databasesRemovePrincipals No summary provided
+  Remove Database principals permissions.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    DatabasePrincipalListRequest - List of database principals to remove., Type: DatabasePrincipalListRequest
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            value
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Successfully removed the list of database principals. Returns the updated list of principals.
+    0: Error response describing why the operation failed.
+ 
+  Returns: DatabasePrincipalListResult
+ 
+  See Also: adx.control.models.DatabasePrincipalListResult
+
+
+
+
+

adx.control.api.Databases.databasesUpdate

+
databasesUpdate No summary provided
+  Updates a database.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    api_version - The API version to use for this operation., Type: string
+    Database - The database parameters supplied to the Update operation., Type: Database
+        Required properties in the model for this call:
+            kind
+        Optional properties in the model for this call:
+            location
+ 
+  Optional name-value parameters:
+    callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string
+ 
+  Responses:
+    200: Successfully updated the database.
+    201: Successfully updated the database.
+    202: Accepted the update database request.
+    0: Error response describing why the operation failed.
+ 
+  Returns: Database
+ 
+  See Also: adx.control.models.Database
+
+
+
+
+
+

adx.control.api.Default

+

Superclass: adx.control.BaseClient

+
Default No description provided
+ 
+  Default Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  Default Methods:
+ 
+    Default - Constructor
+    clustersListSkus - 
+    skusList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.Default.Default

+
Default Constructor, creates a Default instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.Default();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.Default("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.Default("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.Default("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.Default.clustersListSkus

+
clustersListSkus No summary provided
+  Lists eligible SKUs for Kusto resource provider.
+ 
+  Required parameters:
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: SkuDescriptionList
+ 
+  See Also: adx.control.models.SkuDescriptionList
+
+
+
+
+

adx.control.api.Default.skusList

+
skusList No summary provided
+  Lists eligible region SKUs for Kusto resource provider by Azure region.
+ 
+  Required parameters:
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    location - The name of Azure region., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK.
+    0: Error response describing why the operation failed.
+ 
+  Returns: SkuDescriptionList
+ 
+  See Also: adx.control.models.SkuDescriptionList
+
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints

+

Superclass: adx.control.BaseClient

+
ManagedPrivateEndpoints No description provided
+ 
+  ManagedPrivateEndpoints Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  ManagedPrivateEndpoints Methods:
+ 
+    ManagedPrivateEndpoints - Constructor
+    managedPrivateEndpointsCheckNameAvailability - 
+    managedPrivateEndpointsCreateOrUpdate - 
+    managedPrivateEndpointsDelete - 
+    managedPrivateEndpointsGet - 
+    managedPrivateEndpointsList - 
+    managedPrivateEndpointsUpdate - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.ManagedPrivateEndpoints

+
ManagedPrivateEndpoints Constructor, creates a ManagedPrivateEndpoints instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.ManagedPrivateEndpoints();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.ManagedPrivateEndpoints("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.ManagedPrivateEndpoints("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.ManagedPrivateEndpoints("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCheckNameAvailability

+
managedPrivateEndpointsCheckNameAvailability No summary provided
+  Checks that the managed private endpoints resource name is valid and is not already in use.
+ 
+  Required parameters:
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+    subscriptionId - The ID of the target subscription., Type: string
+    ManagedPrivateEndpointsCheckNameRequest - The name of the resource., Type: ManagedPrivateEndpointsCheckNameRequest
+        Required properties in the model for this call:
+            name
+            type
+        Optional properties in the model for this call:
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- Operation to check the kusto resource name availability was successful.
+    0: Error response describing why the operation failed.
+ 
+  Returns: CheckNameResult
+ 
+  See Also: adx.control.models.CheckNameResult
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCreateOrUpdate

+
managedPrivateEndpointsCreateOrUpdate No summary provided
+  Creates a managed private endpoint.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    managedPrivateEndpointName - The name of the managed private endpoint., Type: string
+    api_version - The API version to use for this operation., Type: string
+    ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            xproperties
+            systemData
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the managed private endpoint.
+    201: Successfully created the managed private endpoint.
+    202: Successfully accepted the managed private endpoint.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ManagedPrivateEndpoint
+ 
+  See Also: adx.control.models.ManagedPrivateEndpoint
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsDelete

+
managedPrivateEndpointsDelete No summary provided
+  Deletes a managed private endpoint.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    managedPrivateEndpointName - The name of the managed private endpoint., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK -- managed private endpoint deleted successfully.
+    202: Accepted the delete managed private endpoint request.
+    204: NoContent -- If the managed private endpoint resource is already deleted, this is the expected status code.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsGet

+
managedPrivateEndpointsGet No summary provided
+  Gets a managed private endpoint.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    managedPrivateEndpointName - The name of the managed private endpoint., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The managed private endpoint object.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ManagedPrivateEndpoint
+ 
+  See Also: adx.control.models.ManagedPrivateEndpoint
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsList

+
managedPrivateEndpointsList No summary provided
+  Returns the list of managed private endpoints.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The list result of managed private endpoints.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ManagedPrivateEndpointListResult
+ 
+  See Also: adx.control.models.ManagedPrivateEndpointListResult
+
+
+
+
+

adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsUpdate

+
managedPrivateEndpointsUpdate No summary provided
+  Updates a managed private endpoint.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    managedPrivateEndpointName - The name of the managed private endpoint., Type: string
+    api_version - The API version to use for this operation., Type: string
+    ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            xproperties
+            systemData
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully updated the managed private endpoint.
+    202: Accepted the update request of the managed private endpoint.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ManagedPrivateEndpoint
+ 
+  See Also: adx.control.models.ManagedPrivateEndpoint
+
+
+
+
+
+

adx.control.api.OperationResults

+

Superclass: adx.control.BaseClient

+
OperationResults No description provided
+ 
+  OperationResults Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  OperationResults Methods:
+ 
+    OperationResults - Constructor
+    operationsResultsGet - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.OperationResults.OperationResults

+
OperationResults Constructor, creates a OperationResults instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.OperationResults();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.OperationResults("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.OperationResults("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.OperationResults("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.OperationResults.operationsResultsGet

+
operationsResultsGet No summary provided
+  Returns operation results.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    location - The name of Azure region., Type: string
+    operationId - The ID of an ongoing async operation., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved the operation result.
+    0: Error response describing why the operation failed.
+ 
+  Returns: OperationResult
+ 
+  See Also: adx.control.models.OperationResult
+
+
+
+
+
+

adx.control.api.Operations

+

Superclass: adx.control.BaseClient

+
Operations No description provided
+ 
+  Operations Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  Operations Methods:
+ 
+    Operations - Constructor
+    operationsList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.Operations.Operations

+
Operations Constructor, creates a Operations instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.Operations();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.Operations("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.Operations("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.Operations("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.Operations.operationsList

+
operationsList No summary provided
+  Lists available operations for the Microsoft.Kusto provider.
+ 
+  Required parameters:
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The operation was successful. The response contains the list of available operations.
+    0: Error response describing why the operation failed.
+ 
+  Returns: OperationListResult
+ 
+  See Also: adx.control.models.OperationListResult
+
+
+
+
+
+

adx.control.api.OutboundNetworkDependenciesEndpoints

+

Superclass: adx.control.BaseClient

+
OutboundNetworkDependenciesEndpoints No description provided
+ 
+  OutboundNetworkDependenciesEndpoints Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  OutboundNetworkDependenciesEndpoints Methods:
+ 
+    OutboundNetworkDependenciesEndpoints - Constructor
+    clustersListOutboundNetworkDependenciesEndpoints - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.OutboundNetworkDependenciesEndpoints.OutboundNetworkDependenciesEndpoints

+
OutboundNetworkDependenciesEndpoints Constructor, creates a OutboundNetworkDependenciesEndpoints instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.OutboundNetworkDependenciesEndpoints();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.OutboundNetworkDependenciesEndpoints("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.OutboundNetworkDependenciesEndpoints("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.OutboundNetworkDependenciesEndpoints("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.OutboundNetworkDependenciesEndpoints.clustersListOutboundNetworkDependenciesEndpoints

+
clustersListOutboundNetworkDependenciesEndpoints No summary provided
+  Gets the network endpoints of all outbound dependencies of a Kusto cluster
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: OK
+    0: Error from the RP
+ 
+  Returns: OutboundNetworkDependenciesEndpointListResult
+ 
+  See Also: adx.control.models.OutboundNetworkDependenciesEndpointListResult
+
+
+
+
+
+

adx.control.api.PrivateEndpointConnections

+

Superclass: adx.control.BaseClient

+
PrivateEndpointConnections No description provided
+ 
+  PrivateEndpointConnections Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  PrivateEndpointConnections Methods:
+ 
+    PrivateEndpointConnections - Constructor
+    privateEndpointConnectionsCreateOrUpdate - 
+    privateEndpointConnectionsDelete - 
+    privateEndpointConnectionsGet - 
+    privateEndpointConnectionsList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.PrivateEndpointConnections.PrivateEndpointConnections

+
PrivateEndpointConnections Constructor, creates a PrivateEndpointConnections instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.PrivateEndpointConnections();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.PrivateEndpointConnections("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.PrivateEndpointConnections("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.PrivateEndpointConnections("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsCreateOrUpdate

+
privateEndpointConnectionsCreateOrUpdate No summary provided
+  Approve or reject a private endpoint connection with a given name.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    privateEndpointConnectionName - The name of the private endpoint connection., Type: string
+    api_version - The API version to use for this operation., Type: string
+    PrivateEndpointConnection - No description provided, Type: PrivateEndpointConnection
+        Required properties in the model for this call:
+        Optional properties in the model for this call:
+            xproperties
+            systemData
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully approved or rejected private endpoint connection.
+    201: Accepted. The private endpoint connection update will complete asynchronously.
+    0: Error response describing why the operation failed.
+ 
+  Returns: PrivateEndpointConnection
+ 
+  See Also: adx.control.models.PrivateEndpointConnection
+
+
+
+
+

adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsDelete

+
privateEndpointConnectionsDelete No summary provided
+  Deletes a private endpoint connection with a given name.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    privateEndpointConnectionName - The name of the private endpoint connection., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully deleted the private endpoint connection.
+    202: Accepted. The private endpoint connection delete will complete asynchronously.
+    204: Private endpoint connection does not exist.
+    0: Error response describing why the operation failed.
+ 
+  Returns: 
+ 
+  See Also: adx.control.models.
+
+
+
+
+

adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsGet

+
privateEndpointConnectionsGet No summary provided
+  Gets a private endpoint connection.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    privateEndpointConnectionName - The name of the private endpoint connection., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved a specified private endpoint connection.
+    0: Error response describing why the operation failed.
+ 
+  Returns: PrivateEndpointConnection
+ 
+  See Also: adx.control.models.PrivateEndpointConnection
+
+
+
+
+

adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsList

+
privateEndpointConnectionsList No summary provided
+  Returns the list of private endpoint connections.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The list result of private endpoint connections.
+    0: Error response describing why the operation failed.
+ 
+  Returns: PrivateEndpointConnectionListResult
+ 
+  See Also: adx.control.models.PrivateEndpointConnectionListResult
+
+
+
+
+
+

adx.control.api.PrivateLinkResources

+

Superclass: adx.control.BaseClient

+
PrivateLinkResources No description provided
+ 
+  PrivateLinkResources Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  PrivateLinkResources Methods:
+ 
+    PrivateLinkResources - Constructor
+    privateLinkResourcesGet - 
+    privateLinkResourcesList - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.PrivateLinkResources.PrivateLinkResources

+
PrivateLinkResources Constructor, creates a PrivateLinkResources instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.PrivateLinkResources();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.PrivateLinkResources("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.PrivateLinkResources("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.PrivateLinkResources("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.PrivateLinkResources.privateLinkResourcesGet

+
privateLinkResourcesGet No summary provided
+  Gets a private link resource.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    privateLinkResourceName - The name of the private link resource., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved a specified private link resource.
+    0: Error response describing why the operation failed.
+ 
+  Returns: PrivateLinkResource
+ 
+  See Also: adx.control.models.PrivateLinkResource
+
+
+
+
+

adx.control.api.PrivateLinkResources.privateLinkResourcesList

+
privateLinkResourcesList No summary provided
+  Returns the list of private link resources.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: Successfully retrieved private link resources.
+    0: Error response describing why the operation failed.
+ 
+  Returns: PrivateLinkResourceListResult
+ 
+  See Also: adx.control.models.PrivateLinkResourceListResult
+
+
+
+
+
+

adx.control.api.Scripts

+

Superclass: adx.control.BaseClient

+
Scripts No description provided
+ 
+  Scripts Properties:
+ 
+    serverUri           - Base URI to use when calling the API. Allows using a different server
+                          than specified in the original API spec.
+    httpOptions         - HTTPOptions used by all requests.
+    preferredAuthMethod - If operation supports multiple authentication methods, specified which
+                          method to prefer.
+    bearerToken         - If Bearer token authentication is used, the token can be supplied 
+                          here. Note the token is only used if operations are called for which
+                          the API explicitly specified that Bearer authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require Bearer authentication, consider adding the relevant header to
+                          all requests in the preSend method.
+    apiKey              - If API key authentication is used, the key can be supplied here. 
+                          Note the key is only used if operations are called for which
+                          the API explicitly specified that API key authentication is supported.
+                          If this has not been specified in the spec but most operations do 
+                          require API key authentication, consider adding the API key to all
+                          requests in the preSend method.
+    httpCredentials     - If Basic or Digest authentication is supported username/password
+                          credentials can be supplied here as matlab.net.http.Credentials. Note 
+                          these are only actively used if operations are called for which the 
+                          API spec has specified they require Basic authentication. If this has
+                          not been specified in the spec but most operations do require
+                          Basic authentication, consider setting the Credentials property in the
+                          httpOptions rather than through httpCredentials.
+    cookies             - Cookie jar. The cookie jar is shared across all Api classes in the 
+                          same package. All responses are automatically parsed for Set-Cookie
+                          headers and cookies are automatically added to the jar. Similarly
+                          cookies are added to outgoing requests if there are matching cookies 
+                          in the jar for the given request. Cookies can also be added manually
+                          by calling the setCookies method on the cookies property. The cookie
+                          jar is also saved to disk (cookies.mat in the same directory as 
+                          BaseClient) and reloaded in new MATLAB sessions.
+ 
+  Scripts Methods:
+ 
+    Scripts - Constructor
+    scriptsListByDatabase - 
+ 
+  See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, 
+    CookieJar.setCookies, control.BaseClient
+
+
+
+

adx.control.api.Scripts.Scripts

+
Scripts Constructor, creates a Scripts instance.
+  When called without inputs, tries to load configuration
+  options from JSON file 'adx.Client.Settings.json'.
+  If this file is not present, the instance is initialized with 
+  default configuration option. An alternative configuration 
+  file can be provided through the "configFile" Name-Value pair.
+  All other properties of the instance can also be overridden 
+  using Name-Value pairs where Name equals the property name.
+  
+  Examples:
+ 
+    % Create a client with default options and serverUri
+    % as parsed from OpenAPI spec (if available)
+    client = adx.control.api.Scripts();
+ 
+    % Create a client for alternative server/base URI
+    client = adx.control.api.Scripts("serverUri","https://example.com:1234/api/");
+ 
+    % Create a client loading configuration options from 
+    % JSON configuration file
+    client = adx.control.api.Scripts("configFile","myconfig.json");
+ 
+    % Create a client with alternative HTTPOptions and an API key
+    client = adx.control.api.Scripts("httpOptions",...
+        matlab.net.http.HTTPOptions("ConnectTimeout",42),...
+        "apiKey", "ABC123");
+
+
+
+
+

adx.control.api.Scripts.scriptsListByDatabase

+
scriptsListByDatabase No summary provided
+  Returns the list of database scripts for given database.
+ 
+  Required parameters:
+    subscriptionId - The ID of the target subscription., Type: string
+    resourceGroupName - The name of the resource group. The name is case insensitive., Type: string
+    clusterName - The name of the Kusto cluster., Type: string
+    databaseName - The name of the database in the Kusto cluster., Type: string
+    api_version - The API version to use for this operation., Type: string
+ 
+  No optional parameters
+ 
+  Responses:
+    200: The list result of Kusto database scripts.
+    0: Error response describing why the operation failed.
+ 
+  Returns: ScriptListResult
+ 
+  See Also: adx.control.models.ScriptListResult
+
+
+
+
+
+

adx.control.models

+
+
+

adx.control.models.AcceptedAudiences

+

Superclass: adx.control.JSONMapper

+
AcceptedAudiences Represents an accepted audience trusted by the cluster.
+  
+  AcceptedAudiences Properties:
+    value - GUID or valid URL representing an accepted audience. - type: string
+
+
+
+

adx.control.models.AcceptedAudiences.AcceptedAudiences

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000

+

Superclass: adx.control.JSONEnum

+
AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided
+
+
+
Enumeration values:
+  Union
+  Replace
+  None
+
+
+
+

adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000

+
AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001

+

Superclass: adx.control.JSONEnum

+
AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided
+
+
+
Enumeration values:
+  Union
+  Replace
+  None
+
+
+
+

adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001

+
AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfiguration

+

Superclass: adx.control.JSONMapper

+
AttachedDatabaseConfiguration Class representing an attached database configuration.
+  
+  AttachedDatabaseConfiguration Properties:
+    location - Resource location. - type: string
+    xproperties - type: AttachedDatabaseConfigurationProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.AttachedDatabaseConfiguration.AttachedDatabaseConfiguration

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationListResult

+

Superclass: adx.control.JSONMapper

+
AttachedDatabaseConfigurationListResult The list attached database configurations operation response.
+  
+  AttachedDatabaseConfigurationListResult Properties:
+    value - The list of attached database configurations. - type: array of AttachedDatabaseConfiguration
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationListResult.AttachedDatabaseConfigurationListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationProperties

+

Superclass: adx.control.JSONMapper

+
AttachedDatabaseConfigurationProperties Class representing the an attached database configuration properties of kind specific.
+  
+  AttachedDatabaseConfigurationProperties Properties:
+    provisioningState - type: ProvisioningState
+    databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string
+    clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string
+    attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string
+    defaultPrincipalsModificationKind - The default principals modification kind - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+    databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string
+    databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationProperties.AttachedDatabaseConfigurationProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationProperties_1

+

Superclass: adx.control.JSONMapper

+
AttachedDatabaseConfigurationProperties_1 Class representing the an attached database configuration properties of kind specific.
+  
+  AttachedDatabaseConfigurationProperties_1 Properties:
+    provisioningState - type: ProvisioningState
+    databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string
+    clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string
+    attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string
+    defaultPrincipalsModificationKind - The default principals modification kind - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+    databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string
+    databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationProperties_1.AttachedDatabaseConfigurationProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
AttachedDatabaseConfigurationsCheckNameRequest The result returned from a AttachedDatabaseConfigurations check name availability request.
+  
+  AttachedDatabaseConfigurationsCheckNameRequest Properties:
+    name - Attached database resource name. - type: string
+    type - The type of resource, for instance Microsoft.Kusto/clusters/attachedDatabaseConfigurations. - type: string
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest.AttachedDatabaseConfigurationsCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_attachedDatabaseConfigurations
+
+
+
+

adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum

+
AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.AzureCapacity

+

Superclass: adx.control.JSONMapper

+
AzureCapacity Azure capacity definition.
+  
+  AzureCapacity Properties:
+    scaleType - Scale type. - type: string
+    minimum - Minimum allowed capacity. - type: int32
+    maximum - Maximum allowed capacity. - type: int32
+    default - The default capacity that would be used. - type: int32
+
+
+
+

adx.control.models.AzureCapacity.AzureCapacity

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AzureCapacityScaleTypeEnum

+

Superclass: adx.control.JSONEnum

+
AzureCapacityScaleTypeEnum No description provided
+
+
+
Enumeration values:
+  automatic
+  manual
+  none
+
+
+
+

adx.control.models.AzureCapacityScaleTypeEnum.AzureCapacityScaleTypeEnum

+
AzureCapacityScaleTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.AzureResourceSku

+

Superclass: adx.control.JSONMapper

+
AzureResourceSku Azure resource SKU definition.
+  
+  AzureResourceSku Properties:
+    resourceType - Resource Namespace and Type. - type: string
+    sku - type: AzureSku
+    capacity - type: AzureCapacity
+
+
+
+

adx.control.models.AzureResourceSku.AzureResourceSku

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AzureResourceSku_1

+

Superclass: adx.control.JSONMapper

+
AzureResourceSku_1 Azure resource SKU definition.
+  
+  AzureResourceSku_1 Properties:
+    resourceType - Resource Namespace and Type. - type: string
+    sku - type: AzureSku
+    capacity - type: AzureCapacity
+
+
+
+

adx.control.models.AzureResourceSku_1.AzureResourceSku_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AzureSku

+

Superclass: adx.control.JSONMapper

+
AzureSku Azure SKU definition.
+  
+  AzureSku Properties:
+    name - SKU name. - type: string
+    capacity - The number of instances of the cluster. - type: int32
+    tier - SKU tier. - type: string
+
+
+
+

adx.control.models.AzureSku.AzureSku

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.AzureSkuNameEnum

+

Superclass: adx.control.JSONEnum

+
AzureSkuNameEnum No description provided
+
+
+
Enumeration values:
+  Dev_No_SLA_Standard_D11_v2
+  Dev_No_SLA_Standard_E2a_v4
+  Standard_D11_v2
+  Standard_D12_v2
+  Standard_D13_v2
+  Standard_D14_v2
+  Standard_D32d_v4
+  Standard_D16d_v5
+  Standard_D32d_v5
+  Standard_DS13_v21TB_PS
+  Standard_DS13_v22TB_PS
+  Standard_DS14_v23TB_PS
+  Standard_DS14_v24TB_PS
+  Standard_L4s
+  Standard_L8s
+  Standard_L16s
+  Standard_L8s_v2
+  Standard_L16s_v2
+  Standard_L8s_v3
+  Standard_L16s_v3
+  Standard_L32s_v3
+  Standard_L8as_v3
+  Standard_L16as_v3
+  Standard_L32as_v3
+  Standard_E64i_v3
+  Standard_E80ids_v4
+  Standard_E2a_v4
+  Standard_E4a_v4
+  Standard_E8a_v4
+  Standard_E16a_v4
+  Standard_E8as_v41TB_PS
+  Standard_E8as_v42TB_PS
+  Standard_E16as_v43TB_PS
+  Standard_E16as_v44TB_PS
+  Standard_E8as_v51TB_PS
+  Standard_E8as_v52TB_PS
+  Standard_E16as_v53TB_PS
+  Standard_E16as_v54TB_PS
+  Standard_E2ads_v5
+  Standard_E4ads_v5
+  Standard_E8ads_v5
+  Standard_E16ads_v5
+  Standard_EC8as_v51TB_PS
+  Standard_EC8as_v52TB_PS
+  Standard_EC16as_v53TB_PS
+  Standard_EC16as_v54TB_PS
+  Standard_EC8ads_v5
+  Standard_EC16ads_v5
+  Standard_E8s_v41TB_PS
+  Standard_E8s_v42TB_PS
+  Standard_E16s_v43TB_PS
+  Standard_E16s_v44TB_PS
+  Standard_E8s_v51TB_PS
+  Standard_E8s_v52TB_PS
+  Standard_E16s_v53TB_PS
+  Standard_E16s_v54TB_PS
+  Standard_E2d_v4
+  Standard_E4d_v4
+  Standard_E8d_v4
+  Standard_E16d_v4
+  Standard_E2d_v5
+  Standard_E4d_v5
+  Standard_E8d_v5
+  Standard_E16d_v5
+
+
+
+

adx.control.models.AzureSkuNameEnum.AzureSkuNameEnum

+
AzureSkuNameEnum No description provided
+
+
+
+
+
+

adx.control.models.AzureSkuTierEnum

+

Superclass: adx.control.JSONEnum

+
AzureSkuTierEnum No description provided
+
+
+
Enumeration values:
+  Basic
+  Standard
+
+
+
+

adx.control.models.AzureSkuTierEnum.AzureSkuTierEnum

+
AzureSkuTierEnum No description provided
+
+
+
+
+
+

adx.control.models.BlobStorageEventType

+

Superclass: adx.control.JSONEnum

+
BlobStorageEventType The name of blob storage event type to process.
+
+
+
Enumeration values:
+  Microsoft_Storage_BlobCreated
+  Microsoft_Storage_BlobRenamed
+
+
+
+

adx.control.models.BlobStorageEventType.BlobStorageEventType

+
BlobStorageEventType The name of blob storage event type to process.
+
+
+
+
+
+

adx.control.models.CheckNameRequest

+

Superclass: adx.control.JSONMapper

+
CheckNameRequest The result returned from a database check name availability request.
+  
+  CheckNameRequest Properties:
+    name - Resource name. - type: string
+    type - The type of resource, for instance Microsoft.Kusto/clusters/databases. - type: string
+
+
+
+

adx.control.models.CheckNameRequest.CheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.CheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
CheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_databases
+  Microsoft_Kusto_clusters_attachedDatabaseConfigurations
+
+
+
+

adx.control.models.CheckNameRequestTypeEnum.CheckNameRequestTypeEnum

+
CheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.CheckNameResult

+

Superclass: adx.control.JSONMapper

+
CheckNameResult The result returned from a check name availability request.
+  
+  CheckNameResult Properties:
+    nameAvailable - Specifies a Boolean value that indicates if the name is available. - type: logical
+    name - The name that was checked. - type: string
+    message - Message indicating an unavailable name due to a conflict, or a description of the naming rules that are violated. - type: string
+    reason - Message providing the reason why the given name is invalid. - type: string
+
+
+
+

adx.control.models.CheckNameResult.CheckNameResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.CheckNameResultReasonEnum

+

Superclass: adx.control.JSONEnum

+
CheckNameResultReasonEnum No description provided
+
+
+
Enumeration values:
+  Invalid
+  AlreadyExists
+
+
+
+

adx.control.models.CheckNameResultReasonEnum.CheckNameResultReasonEnum

+
CheckNameResultReasonEnum No description provided
+
+
+
+
+
+

adx.control.models.Cluster

+

Superclass: adx.control.JSONMapper

+
Cluster Class representing a Kusto cluster.
+  
+  Cluster Properties:
+    sku - type: AzureSku
+    systemData - type: systemData
+    zones - An array represents the availability zones of the cluster. - type: array of string
+    identity - type: Identity
+    xproperties - type: ClusterProperties_1
+    etag - A unique read-only string that changes whenever the resource is updated. - type: string
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.Cluster.Cluster

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
ClusterCheckNameRequest The result returned from a cluster check name availability request.
+  
+  ClusterCheckNameRequest Properties:
+    name - Cluster name. - type: string
+    type - The type of resource, Microsoft.Kusto/clusters. - type: string
+
+
+
+

adx.control.models.ClusterCheckNameRequest.ClusterCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters
+
+
+
+

adx.control.models.ClusterCheckNameRequestTypeEnum.ClusterCheckNameRequestTypeEnum

+
ClusterCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterListResult

+

Superclass: adx.control.JSONMapper

+
ClusterListResult The list Kusto clusters operation response.
+  
+  ClusterListResult Properties:
+    value - The list of Kusto clusters. - type: array of Cluster
+
+
+
+

adx.control.models.ClusterListResult.ClusterListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterMigrateRequest

+

Superclass: adx.control.JSONMapper

+
ClusterMigrateRequest A cluster migrate request.
+  
+  ClusterMigrateRequest Properties:
+    clusterResourceId - Resource ID of the destination cluster or kusto pool. - type: string
+
+
+
+

adx.control.models.ClusterMigrateRequest.ClusterMigrateRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalAssignment

+

Superclass: adx.control.JSONMapper

+
ClusterPrincipalAssignment Class representing a cluster principal assignment.
+  
+  ClusterPrincipalAssignment Properties:
+    xproperties - type: ClusterPrincipalProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ClusterPrincipalAssignment.ClusterPrincipalAssignment

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
ClusterPrincipalAssignmentCheckNameRequest A principal assignment check name availability request.
+  
+  ClusterPrincipalAssignmentCheckNameRequest Properties:
+    name - Principal Assignment resource name. - type: string
+    type - The type of resource, Microsoft.Kusto/clusters/principalAssignments. - type: string
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentCheckNameRequest.ClusterPrincipalAssignmentCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_principalAssignments
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum.ClusterPrincipalAssignmentCheckNameRequestTypeEnum

+
ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentListResult

+

Superclass: adx.control.JSONMapper

+
ClusterPrincipalAssignmentListResult The list Kusto cluster principal assignments operation response.
+  
+  ClusterPrincipalAssignmentListResult Properties:
+    value - The list of Kusto cluster principal assignments. - type: array of ClusterPrincipalAssignment
+
+
+
+

adx.control.models.ClusterPrincipalAssignmentListResult.ClusterPrincipalAssignmentListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalProperties

+

Superclass: adx.control.JSONMapper

+
ClusterPrincipalProperties A class representing cluster principal property.
+  
+  ClusterPrincipalProperties Properties:
+    principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string
+    role - Cluster principal role. - type: string
+    tenantId - The tenant id of the principal - type: string
+    principalType - Principal type. - type: string
+    tenantName - The tenant name of the principal - type: string
+    principalName - The principal name - type: string
+    provisioningState - type: ProvisioningState
+    aadObjectId - The service principal object id in AAD (Azure active directory) - type: string
+
+
+
+

adx.control.models.ClusterPrincipalProperties.ClusterPrincipalProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPrincipalPropertiesPrincipalTypeEnum No description provided
+
+
+
Enumeration values:
+  App
+  Group
+  User
+
+
+
+

adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum.ClusterPrincipalPropertiesPrincipalTypeEnum

+
ClusterPrincipalPropertiesPrincipalTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPrincipalPropertiesRoleEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPrincipalPropertiesRoleEnum No description provided
+
+
+
Enumeration values:
+  AllDatabasesAdmin
+  AllDatabasesViewer
+
+
+
+

adx.control.models.ClusterPrincipalPropertiesRoleEnum.ClusterPrincipalPropertiesRoleEnum

+
ClusterPrincipalPropertiesRoleEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1

+

Superclass: adx.control.JSONMapper

+
ClusterPrincipalProperties_1 A class representing cluster principal property.
+  
+  ClusterPrincipalProperties_1 Properties:
+    principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string
+    role - Cluster principal role. - type: string
+    tenantId - The tenant id of the principal - type: string
+    principalType - Principal type. - type: string
+    tenantName - The tenant name of the principal - type: string
+    principalName - The principal name - type: string
+    provisioningState - type: ProvisioningState
+    aadObjectId - The service principal object id in AAD (Azure active directory) - type: string
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1.ClusterPrincipalProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPrincipalProperties_1PrincipalTypeEnum No description provided
+
+
+
Enumeration values:
+  App
+  Group
+  User
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum.ClusterPrincipalProperties_1PrincipalTypeEnum

+
ClusterPrincipalProperties_1PrincipalTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1RoleEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPrincipalProperties_1RoleEnum No description provided
+
+
+
Enumeration values:
+  AllDatabasesAdmin
+  AllDatabasesViewer
+
+
+
+

adx.control.models.ClusterPrincipalProperties_1RoleEnum.ClusterPrincipalProperties_1RoleEnum

+
ClusterPrincipalProperties_1RoleEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties

+

Superclass: adx.control.JSONMapper

+
ClusterProperties Class representing the Kusto cluster properties.
+  
+  ClusterProperties Properties:
+    state - The state of the resource. - type: string
+    provisioningState - type: ProvisioningState
+    uri - The cluster URI. - type: string
+    dataIngestionUri - The cluster data ingestion URI. - type: string
+    stateReason - The reason for the cluster''s current state. - type: string
+    trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant
+    optimizedAutoscale - type: OptimizedAutoscale
+    enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical
+    enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical
+    virtualNetworkConfiguration - type: VirtualNetworkConfiguration
+    keyVaultProperties - type: KeyVaultProperties
+    enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical
+    languageExtensions - type: LanguageExtensionsList
+    enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical
+    publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string
+    allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string
+    engineType - The engine type - type: string
+    acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences
+    enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical
+    restrictOutboundNetworkAccess - Whether or not to restrict outbound network access.  Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string
+    allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string
+    publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string
+    virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string
+    privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection
+    migrationCluster - type: MigrationClusterProperties
+
+
+
+

adx.control.models.ClusterProperties.ClusterProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterPropertiesEngineTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPropertiesEngineTypeEnum No description provided
+
+
+
Enumeration values:
+  V2
+  V3
+
+
+
+

adx.control.models.ClusterPropertiesEngineTypeEnum.ClusterPropertiesEngineTypeEnum

+
ClusterPropertiesEngineTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPropertiesPublicIPTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPropertiesPublicIPTypeEnum No description provided
+
+
+
Enumeration values:
+  IPv4
+  DualStack
+
+
+
+

adx.control.models.ClusterPropertiesPublicIPTypeEnum.ClusterPropertiesPublicIPTypeEnum

+
ClusterPropertiesPublicIPTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPropertiesPublicNetworkAccessEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPropertiesPublicNetworkAccessEnum No description provided
+
+
+
Enumeration values:
+  Enabled
+  Disabled
+
+
+
+

adx.control.models.ClusterPropertiesPublicNetworkAccessEnum.ClusterPropertiesPublicNetworkAccessEnum

+
ClusterPropertiesPublicNetworkAccessEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided
+
+
+
Enumeration values:
+  Enabled
+  Disabled
+
+
+
+

adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum.ClusterPropertiesRestrictOutboundNetworkAccessEnum

+
ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterPropertiesStateEnum

+

Superclass: adx.control.JSONEnum

+
ClusterPropertiesStateEnum No description provided
+
+
+
Enumeration values:
+  Creating
+  Unavailable
+  Running
+  Deleting
+  Deleted
+  Stopping
+  Stopped
+  Starting
+  Updating
+  Migrated
+
+
+
+

adx.control.models.ClusterPropertiesStateEnum.ClusterPropertiesStateEnum

+
ClusterPropertiesStateEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties_1

+

Superclass: adx.control.JSONMapper

+
ClusterProperties_1 Class representing the Kusto cluster properties.
+  
+  ClusterProperties_1 Properties:
+    state - The state of the resource. - type: string
+    provisioningState - type: ProvisioningState
+    uri - The cluster URI. - type: string
+    dataIngestionUri - The cluster data ingestion URI. - type: string
+    stateReason - The reason for the cluster''s current state. - type: string
+    trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant
+    optimizedAutoscale - type: OptimizedAutoscale
+    enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical
+    enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical
+    virtualNetworkConfiguration - type: VirtualNetworkConfiguration
+    keyVaultProperties - type: KeyVaultProperties
+    enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical
+    languageExtensions - type: LanguageExtensionsList
+    enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical
+    publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string
+    allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string
+    engineType - The engine type - type: string
+    acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences
+    enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical
+    restrictOutboundNetworkAccess - Whether or not to restrict outbound network access.  Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string
+    allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string
+    publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string
+    virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string
+    privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection
+    migrationCluster - type: MigrationClusterProperties
+
+
+
+

adx.control.models.ClusterProperties_1.ClusterProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ClusterProperties_1EngineTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterProperties_1EngineTypeEnum No description provided
+
+
+
Enumeration values:
+  V2
+  V3
+
+
+
+

adx.control.models.ClusterProperties_1EngineTypeEnum.ClusterProperties_1EngineTypeEnum

+
ClusterProperties_1EngineTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties_1PublicIPTypeEnum

+

Superclass: adx.control.JSONEnum

+
ClusterProperties_1PublicIPTypeEnum No description provided
+
+
+
Enumeration values:
+  IPv4
+  DualStack
+
+
+
+

adx.control.models.ClusterProperties_1PublicIPTypeEnum.ClusterProperties_1PublicIPTypeEnum

+
ClusterProperties_1PublicIPTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties_1PublicNetworkAccessEnum

+

Superclass: adx.control.JSONEnum

+
ClusterProperties_1PublicNetworkAccessEnum No description provided
+
+
+
Enumeration values:
+  Enabled
+  Disabled
+
+
+
+

adx.control.models.ClusterProperties_1PublicNetworkAccessEnum.ClusterProperties_1PublicNetworkAccessEnum

+
ClusterProperties_1PublicNetworkAccessEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum

+

Superclass: adx.control.JSONEnum

+
ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided
+
+
+
Enumeration values:
+  Enabled
+  Disabled
+
+
+
+

adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum.ClusterProperties_1RestrictOutboundNetworkAccessEnum

+
ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterProperties_1StateEnum

+

Superclass: adx.control.JSONEnum

+
ClusterProperties_1StateEnum No description provided
+
+
+
Enumeration values:
+  Creating
+  Unavailable
+  Running
+  Deleting
+  Deleted
+  Stopping
+  Stopped
+  Starting
+  Updating
+  Migrated
+
+
+
+

adx.control.models.ClusterProperties_1StateEnum.ClusterProperties_1StateEnum

+
ClusterProperties_1StateEnum No description provided
+
+
+
+
+
+

adx.control.models.ClusterUpdate

+

Superclass: adx.control.JSONMapper

+
ClusterUpdate Class representing an update to a Kusto cluster.
+  
+  ClusterUpdate Properties:
+    tags - Resource tags. - type: adx.control.JSONMapperMap
+    location - Resource location. - type: string
+    sku - type: AzureSku
+    identity - type: Identity
+    xproperties - type: ClusterProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ClusterUpdate.ClusterUpdate

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.Compression

+

Superclass: adx.control.JSONEnum

+
Compression The compression type
+
+
+
Enumeration values:
+  None
+  GZip
+
+
+
+

adx.control.models.Compression.Compression

+
Compression The compression type
+
+
+
+
+
+

adx.control.models.CosmosDbDataConnection

+

Superclass: adx.control.JSONMapper

+
CosmosDbDataConnection Class representing a CosmosDb data connection.
+  
+  CosmosDbDataConnection Properties:
+    xproperties - type: CosmosDbDataConnectionProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.CosmosDbDataConnection.CosmosDbDataConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.CosmosDbDataConnectionProperties

+

Superclass: adx.control.JSONMapper

+
CosmosDbDataConnectionProperties Class representing the Kusto CosmosDb data connection properties.
+  
+  CosmosDbDataConnectionProperties Properties:
+    tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string
+    mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string
+    managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string
+    managedIdentityObjectId - The object ID of the managed identity resource. - type: string
+    cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string
+    cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string
+    cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string
+    retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.CosmosDbDataConnectionProperties.CosmosDbDataConnectionProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.CosmosDbDataConnectionProperties_1

+

Superclass: adx.control.JSONMapper

+
CosmosDbDataConnectionProperties_1 Class representing the Kusto CosmosDb data connection properties.
+  
+  CosmosDbDataConnectionProperties_1 Properties:
+    tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string
+    mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string
+    managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string
+    managedIdentityObjectId - The object ID of the managed identity resource. - type: string
+    cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string
+    cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string
+    cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string
+    retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.CosmosDbDataConnectionProperties_1.CosmosDbDataConnectionProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnection

+

Superclass: adx.control.JSONMapper

+
DataConnection Class representing an data connection.
+  
+  DataConnection Properties:
+    location - Resource location. - type: string
+    kind - Kind of the endpoint for the data connection - type: string
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.DataConnection.DataConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnectionCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
DataConnectionCheckNameRequest A data connection check name availability request.
+  
+  DataConnectionCheckNameRequest Properties:
+    name - Data Connection name. - type: string
+    type - The type of resource, Microsoft.Kusto/clusters/databases/dataConnections. - type: string
+
+
+
+

adx.control.models.DataConnectionCheckNameRequest.DataConnectionCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnectionCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
DataConnectionCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_databases_dataConnections
+
+
+
+

adx.control.models.DataConnectionCheckNameRequestTypeEnum.DataConnectionCheckNameRequestTypeEnum

+
DataConnectionCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.DataConnectionKindEnum

+

Superclass: adx.control.JSONEnum

+
DataConnectionKindEnum No description provided
+
+
+
Enumeration values:
+  EventHub
+  EventGrid
+  IotHub
+  CosmosDb
+
+
+
+

adx.control.models.DataConnectionKindEnum.DataConnectionKindEnum

+
DataConnectionKindEnum No description provided
+
+
+
+
+
+

adx.control.models.DataConnectionListResult

+

Superclass: adx.control.JSONMapper

+
DataConnectionListResult The list Kusto data connections operation response.
+  
+  DataConnectionListResult Properties:
+    value - The list of Kusto data connections. - type: array of DataConnection
+
+
+
+

adx.control.models.DataConnectionListResult.DataConnectionListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnectionValidation

+

Superclass: adx.control.JSONMapper

+
DataConnectionValidation Class representing an data connection validation.
+  
+  DataConnectionValidation Properties:
+    dataConnectionName - The name of the data connection. - type: string
+    xproperties - type: DataConnection
+
+
+
+

adx.control.models.DataConnectionValidation.DataConnectionValidation

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnectionValidationListResult

+

Superclass: adx.control.JSONMapper

+
DataConnectionValidationListResult The list Kusto data connection validation result.
+  
+  DataConnectionValidationListResult Properties:
+    value - The list of Kusto data connection validation errors. - type: array of DataConnectionValidationResult
+
+
+
+

adx.control.models.DataConnectionValidationListResult.DataConnectionValidationListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DataConnectionValidationResult

+

Superclass: adx.control.JSONMapper

+
DataConnectionValidationResult The result returned from a data connection validation request.
+  
+  DataConnectionValidationResult Properties:
+    errorMessage - A message which indicates a problem in data connection validation. - type: string
+
+
+
+

adx.control.models.DataConnectionValidationResult.DataConnectionValidationResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.Database

+

Superclass: adx.control.JSONMapper

+
Database Class representing a Kusto database.
+  
+  Database Properties:
+    location - Resource location. - type: string
+    kind - Kind of the database - type: string
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.Database.Database

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabaseInviteFollowerRequest

+

Superclass: adx.control.JSONMapper

+
DatabaseInviteFollowerRequest The request to invite a follower to a database.
+  
+  DatabaseInviteFollowerRequest Properties:
+    inviteeEmail - The email of the invited user for which the follower invitation is generated. - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+
+
+
+

adx.control.models.DatabaseInviteFollowerRequest.DatabaseInviteFollowerRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabaseInviteFollowerResult

+

Superclass: adx.control.JSONMapper

+
DatabaseInviteFollowerResult The result returned from a follower invitation generation request.
+  
+  DatabaseInviteFollowerResult Properties:
+    generatedInvitation - The generated invitation token. - type: string
+
+
+
+

adx.control.models.DatabaseInviteFollowerResult.DatabaseInviteFollowerResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabaseKindEnum

+

Superclass: adx.control.JSONEnum

+
DatabaseKindEnum No description provided
+
+
+
Enumeration values:
+  ReadWrite
+  ReadOnlyFollowing
+
+
+
+

adx.control.models.DatabaseKindEnum.DatabaseKindEnum

+
DatabaseKindEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabaseListResult

+

Superclass: adx.control.JSONMapper

+
DatabaseListResult The list Kusto databases operation response.
+  
+  DatabaseListResult Properties:
+    nextLink - Link to the next page of results - type: string
+    value - The list of Kusto databases. - type: array of Database
+
+
+
+

adx.control.models.DatabaseListResult.DatabaseListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipal

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipal A class representing database principal entity.
+  
+  DatabasePrincipal Properties:
+    role - Database principal role. - type: string
+    name - Database principal name. - type: string
+    type - Database principal type. - type: string
+    fqn - Database principal fully qualified name. - type: string
+    email - Database principal email if exists. - type: string
+    appId - Application id - relevant only for application principal type. - type: string
+    tenantName - The tenant name of the principal - type: string
+
+
+
+

adx.control.models.DatabasePrincipal.DatabasePrincipal

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalAssignment

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalAssignment Class representing a database principal assignment.
+  
+  DatabasePrincipalAssignment Properties:
+    xproperties - type: DatabasePrincipalProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.DatabasePrincipalAssignment.DatabasePrincipalAssignment

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalAssignmentCheckNameRequest A principal assignment check name availability request.
+  
+  DatabasePrincipalAssignmentCheckNameRequest Properties:
+    name - Principal Assignment resource name. - type: string
+    type - The type of resource, Microsoft.Kusto/clusters/databases/principalAssignments. - type: string
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentCheckNameRequest.DatabasePrincipalAssignmentCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_databases_principalAssignments
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum.DatabasePrincipalAssignmentCheckNameRequestTypeEnum

+
DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentListResult

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalAssignmentListResult The list Kusto database principal assignments operation response.
+  
+  DatabasePrincipalAssignmentListResult Properties:
+    value - The list of Kusto database principal assignments. - type: array of DatabasePrincipalAssignment
+
+
+
+

adx.control.models.DatabasePrincipalAssignmentListResult.DatabasePrincipalAssignmentListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalListRequest

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalListRequest The list Kusto database principals operation request.
+  
+  DatabasePrincipalListRequest Properties:
+    value - The list of Kusto database principals. - type: array of DatabasePrincipal
+
+
+
+

adx.control.models.DatabasePrincipalListRequest.DatabasePrincipalListRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalListResult

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalListResult The list Kusto database principals operation response.
+  
+  DatabasePrincipalListResult Properties:
+    value - The list of Kusto database principals. - type: array of DatabasePrincipal
+
+
+
+

adx.control.models.DatabasePrincipalListResult.DatabasePrincipalListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalProperties

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalProperties A class representing database principal property.
+  
+  DatabasePrincipalProperties Properties:
+    principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string
+    role - Database principal role. - type: string
+    tenantId - The tenant id of the principal - type: string
+    principalType - Principal type. - type: string
+    tenantName - The tenant name of the principal - type: string
+    principalName - The principal name - type: string
+    provisioningState - type: ProvisioningState
+    aadObjectId - The service principal object id in AAD (Azure active directory) - type: string
+
+
+
+

adx.control.models.DatabasePrincipalProperties.DatabasePrincipalProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalPropertiesPrincipalTypeEnum No description provided
+
+
+
Enumeration values:
+  App
+  Group
+  User
+
+
+
+

adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum.DatabasePrincipalPropertiesPrincipalTypeEnum

+
DatabasePrincipalPropertiesPrincipalTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalPropertiesRoleEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalPropertiesRoleEnum No description provided
+
+
+
Enumeration values:
+  Admin
+  Ingestor
+  Monitor
+  User
+  UnrestrictedViewer
+  Viewer
+
+
+
+

adx.control.models.DatabasePrincipalPropertiesRoleEnum.DatabasePrincipalPropertiesRoleEnum

+
DatabasePrincipalPropertiesRoleEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1

+

Superclass: adx.control.JSONMapper

+
DatabasePrincipalProperties_1 A class representing database principal property.
+  
+  DatabasePrincipalProperties_1 Properties:
+    principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string
+    role - Database principal role. - type: string
+    tenantId - The tenant id of the principal - type: string
+    principalType - Principal type. - type: string
+    tenantName - The tenant name of the principal - type: string
+    principalName - The principal name - type: string
+    provisioningState - type: ProvisioningState
+    aadObjectId - The service principal object id in AAD (Azure active directory) - type: string
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1.DatabasePrincipalProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalProperties_1PrincipalTypeEnum No description provided
+
+
+
Enumeration values:
+  App
+  Group
+  User
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum.DatabasePrincipalProperties_1PrincipalTypeEnum

+
DatabasePrincipalProperties_1PrincipalTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1RoleEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalProperties_1RoleEnum No description provided
+
+
+
Enumeration values:
+  Admin
+  Ingestor
+  Monitor
+  User
+  UnrestrictedViewer
+  Viewer
+
+
+
+

adx.control.models.DatabasePrincipalProperties_1RoleEnum.DatabasePrincipalProperties_1RoleEnum

+
DatabasePrincipalProperties_1RoleEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalRoleEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalRoleEnum No description provided
+
+
+
Enumeration values:
+  Admin
+  Ingestor
+  Monitor
+  User
+  UnrestrictedViewer
+  Viewer
+
+
+
+

adx.control.models.DatabasePrincipalRoleEnum.DatabasePrincipalRoleEnum

+
DatabasePrincipalRoleEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabasePrincipalTypeEnum

+

Superclass: adx.control.JSONEnum

+
DatabasePrincipalTypeEnum No description provided
+
+
+
Enumeration values:
+  App
+  Group
+  User
+
+
+
+

adx.control.models.DatabasePrincipalTypeEnum.DatabasePrincipalTypeEnum

+
DatabasePrincipalTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.DatabaseShareOrigin

+

Superclass: adx.control.JSONEnum

+
DatabaseShareOrigin The origin of the following setup.
+
+
+
Enumeration values:
+  Direct
+  DataShare
+  Other
+
+
+
+

adx.control.models.DatabaseShareOrigin.DatabaseShareOrigin

+
DatabaseShareOrigin The origin of the following setup.
+
+
+
+
+
+

adx.control.models.DatabaseStatistics

+

Superclass: adx.control.JSONMapper

+
DatabaseStatistics A class that contains database statistics information.
+  
+  DatabaseStatistics Properties:
+    size - The database size - the total size of compressed data and index in bytes. - type: double
+
+
+
+

adx.control.models.DatabaseStatistics.DatabaseStatistics

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.DiagnoseVirtualNetworkResult

+

Superclass: adx.control.JSONMapper

+
DiagnoseVirtualNetworkResult No description provided
+  
+  DiagnoseVirtualNetworkResult Properties:
+    findings - The list of network connectivity diagnostic finding - type: array of string
+
+
+
+

adx.control.models.DiagnoseVirtualNetworkResult.DiagnoseVirtualNetworkResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EndpointDependency

+

Superclass: adx.control.JSONMapper

+
EndpointDependency A domain name that a service is reached at, including details of the current connection status.
+  
+  EndpointDependency Properties:
+    domainName - The domain name of the dependency. - type: string
+    endpointDetails - The ports used when connecting to DomainName. - type: array of EndpointDetail
+
+
+
+

adx.control.models.EndpointDependency.EndpointDependency

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EndpointDetail

+

Superclass: adx.control.JSONMapper

+
EndpointDetail Current TCP connectivity information from the Kusto cluster to a single endpoint.
+  
+  EndpointDetail Properties:
+    port - The port an endpoint is connected to. - type: int32
+
+
+
+

adx.control.models.EndpointDetail.EndpointDetail

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ErrorAdditionalInfo

+

Superclass: adx.control.JSONMapper

+
ErrorAdditionalInfo The resource management error additional info.
+  
+  ErrorAdditionalInfo Properties:
+    type - The additional info type. - type: string
+    info - The additional info. - type: object
+
+
+
+

adx.control.models.ErrorAdditionalInfo.ErrorAdditionalInfo

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+

adx.control.models.ErrorAdditionalInfo.disp

+
DISP Display array.
+    DISP(X) displays array X without printing the array name or 
+    additional description information such as the size and class name.
+    In all other ways it is the same as leaving the semicolon off an
+    expression except that nothing is shown for empty arrays.
+ 
+    If X is a string or character array, the text is displayed.
+ 
+    See also formattedDisplayText, sprintf, num2str, format, details.
+
+
+
+
+
+

adx.control.models.ErrorDetail

+

Superclass: adx.control.JSONMapper

+
ErrorDetail The error detail.
+  
+  ErrorDetail Properties:
+    code - The error code. - type: string
+    message - The error message. - type: string
+    target - The error target. - type: string
+    details - The error details. - type: array of ErrorDetail
+    additionalInfo - The error additional info. - type: array of ErrorAdditionalInfo
+
+
+
+

adx.control.models.ErrorDetail.ErrorDetail

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+

adx.control.models.ErrorDetail.disp

+
DISP Display array.
+    DISP(X) displays array X without printing the array name or 
+    additional description information such as the size and class name.
+    In all other ways it is the same as leaving the semicolon off an
+    expression except that nothing is shown for empty arrays.
+ 
+    If X is a string or character array, the text is displayed.
+ 
+    See also formattedDisplayText, sprintf, num2str, format, details.
+
+
+
+
+
+

adx.control.models.ErrorResponse

+

Superclass: adx.control.JSONMapper

+
ErrorResponse Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.).
+  
+  ErrorResponse Properties:
+    error - type: ErrorDetail
+
+
+
+

adx.control.models.ErrorResponse.ErrorResponse

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+

adx.control.models.ErrorResponse.disp

+
DISP Display array.
+    DISP(X) displays array X without printing the array name or 
+    additional description information such as the size and class name.
+    In all other ways it is the same as leaving the semicolon off an
+    expression except that nothing is shown for empty arrays.
+ 
+    If X is a string or character array, the text is displayed.
+ 
+    See also formattedDisplayText, sprintf, num2str, format, details.
+
+
+
+
+
+

adx.control.models.EventGridConnectionProperties

+

Superclass: adx.control.JSONMapper

+
EventGridConnectionProperties Class representing the Kusto event grid connection properties.
+  
+  EventGridConnectionProperties Properties:
+    storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string
+    eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string
+    eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string
+    consumerGroup - The event hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: EventGridDataFormat
+    ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical
+    blobStorageEventType - type: BlobStorageEventType
+    managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string
+    managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.EventGridConnectionProperties.EventGridConnectionProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
EventGridConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum.EventGridConnectionPropertiesDatabaseRoutingEnum

+
EventGridConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.EventGridConnectionProperties_1

+

Superclass: adx.control.JSONMapper

+
EventGridConnectionProperties_1 Class representing the Kusto event grid connection properties.
+  
+  EventGridConnectionProperties_1 Properties:
+    storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string
+    eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string
+    eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string
+    consumerGroup - The event hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: EventGridDataFormat
+    ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical
+    blobStorageEventType - type: BlobStorageEventType
+    managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string
+    managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.EventGridConnectionProperties_1.EventGridConnectionProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
EventGridConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum.EventGridConnectionProperties_1DatabaseRoutingEnum

+
EventGridConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.EventGridDataConnection

+

Superclass: adx.control.JSONMapper

+
EventGridDataConnection Class representing an Event Grid data connection.
+  
+  EventGridDataConnection Properties:
+    xproperties - type: EventGridConnectionProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.EventGridDataConnection.EventGridDataConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventGridDataFormat

+

Superclass: adx.control.JSONEnum

+
EventGridDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
Enumeration values:
+  MULTIJSON
+  JSON
+  CSV
+  TSV
+  SCSV
+  SOHSV
+  PSV
+  TXT
+  RAW
+  SINGLEJSON
+  AVRO
+  TSVE
+  PARQUET
+  ORC
+  APACHEAVRO
+  W3CLOGFILE
+
+
+
+

adx.control.models.EventGridDataFormat.EventGridDataFormat

+
EventGridDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
+
+
+

adx.control.models.EventHubConnectionProperties

+

Superclass: adx.control.JSONMapper

+
EventHubConnectionProperties Class representing the Kusto event hub connection properties.
+  
+  EventHubConnectionProperties Properties:
+    eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string
+    consumerGroup - The event hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: EventHubDataFormat
+    eventSystemProperties - System properties of the event hub - type: array of string
+    compression - type: Compression
+    provisioningState - type: ProvisioningState
+    managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string
+    managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime
+
+
+
+

adx.control.models.EventHubConnectionProperties.EventHubConnectionProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
EventHubConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum.EventHubConnectionPropertiesDatabaseRoutingEnum

+
EventHubConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.EventHubConnectionProperties_1

+

Superclass: adx.control.JSONMapper

+
EventHubConnectionProperties_1 Class representing the Kusto event hub connection properties.
+  
+  EventHubConnectionProperties_1 Properties:
+    eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string
+    consumerGroup - The event hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: EventHubDataFormat
+    eventSystemProperties - System properties of the event hub - type: array of string
+    compression - type: Compression
+    provisioningState - type: ProvisioningState
+    managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string
+    managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime
+
+
+
+

adx.control.models.EventHubConnectionProperties_1.EventHubConnectionProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
EventHubConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum.EventHubConnectionProperties_1DatabaseRoutingEnum

+
EventHubConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.EventHubDataConnection

+

Superclass: adx.control.JSONMapper

+
EventHubDataConnection Class representing an event hub data connection.
+  
+  EventHubDataConnection Properties:
+    xproperties - type: EventHubConnectionProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.EventHubDataConnection.EventHubDataConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.EventHubDataFormat

+

Superclass: adx.control.JSONEnum

+
EventHubDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
Enumeration values:
+  MULTIJSON
+  JSON
+  CSV
+  TSV
+  SCSV
+  SOHSV
+  PSV
+  TXT
+  RAW
+  SINGLEJSON
+  AVRO
+  TSVE
+  PARQUET
+  ORC
+  APACHEAVRO
+  W3CLOGFILE
+
+
+
+

adx.control.models.EventHubDataFormat.EventHubDataFormat

+
EventHubDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
+
+
+

adx.control.models.FollowerDatabaseDefinition

+

Superclass: adx.control.JSONMapper

+
FollowerDatabaseDefinition A class representing follower database request.
+  
+  FollowerDatabaseDefinition Properties:
+    clusterResourceId - Resource id of the cluster that follows a database owned by this cluster. - type: string
+    attachedDatabaseConfigurationName - Resource name of the attached database configuration in the follower cluster. - type: string
+    databaseName - The database name owned by this cluster that was followed. * in case following all databases. - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+    databaseShareOrigin - type: DatabaseShareOrigin
+
+
+
+

adx.control.models.FollowerDatabaseDefinition.FollowerDatabaseDefinition

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.FollowerDatabaseListResult

+

Superclass: adx.control.JSONMapper

+
FollowerDatabaseListResult The list Kusto database principals operation response.
+  
+  FollowerDatabaseListResult Properties:
+    value - The list of follower database result. - type: array of FollowerDatabaseDefinition
+
+
+
+

adx.control.models.FollowerDatabaseListResult.FollowerDatabaseListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.FreeFormObject

+

Superclass: dynamicprops

+
Class methods
+
+
+
+

adx.control.models.FreeFormObject.FreeFormObject

+
Class methods
+
+
+
+
+
+

adx.control.models.Identity

+

Superclass: adx.control.JSONMapper

+
Identity Identity for the resource.
+  
+  Identity Properties:
+    principalId - The principal ID of resource identity. - type: string
+    tenantId - The tenant ID of resource. - type: string
+    type - The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove all identities. - type: string
+    userAssignedIdentities - The list of user identities associated with the Kusto cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''. - type: adx.control.JSONMapperMap
+
+
+
+

adx.control.models.Identity.Identity

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.IdentityTypeEnum

+

Superclass: adx.control.JSONEnum

+
IdentityTypeEnum No description provided
+
+
+
Enumeration values:
+  None
+  SystemAssigned
+  UserAssigned
+  SystemAssigned_UserAssigned
+
+
+
+

adx.control.models.IdentityTypeEnum.IdentityTypeEnum

+
IdentityTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.Identity_userAssignedIdentities_value

+

Superclass: adx.control.JSONMapper

+
Identity_userAssignedIdentities_value No description provided
+  
+  Identity_userAssignedIdentities_value Properties:
+    principalId - The principal id of user assigned identity. - type: string
+    clientId - The client id of user assigned identity. - type: string
+
+
+
+

adx.control.models.Identity_userAssignedIdentities_value.Identity_userAssignedIdentities_value

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.IotHubConnectionProperties

+

Superclass: adx.control.JSONMapper

+
IotHubConnectionProperties Class representing the Kusto Iot hub connection properties.
+  
+  IotHubConnectionProperties Properties:
+    iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string
+    consumerGroup - The iot hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: IotHubDataFormat
+    eventSystemProperties - System properties of the iot hub - type: array of string
+    sharedAccessPolicyName - The name of the share access policy - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.IotHubConnectionProperties.IotHubConnectionProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
IotHubConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum.IotHubConnectionPropertiesDatabaseRoutingEnum

+
IotHubConnectionPropertiesDatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.IotHubConnectionProperties_1

+

Superclass: adx.control.JSONMapper

+
IotHubConnectionProperties_1 Class representing the Kusto Iot hub connection properties.
+  
+  IotHubConnectionProperties_1 Properties:
+    iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string
+    consumerGroup - The iot hub consumer group. - type: string
+    tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string
+    mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string
+    dataFormat - type: IotHubDataFormat
+    eventSystemProperties - System properties of the iot hub - type: array of string
+    sharedAccessPolicyName - The name of the share access policy - type: string
+    databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string
+    retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.IotHubConnectionProperties_1.IotHubConnectionProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum

+

Superclass: adx.control.JSONEnum

+
IotHubConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
Enumeration values:
+  Single
+  Multi
+
+
+
+

adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum.IotHubConnectionProperties_1DatabaseRoutingEnum

+
IotHubConnectionProperties_1DatabaseRoutingEnum No description provided
+
+
+
+
+
+

adx.control.models.IotHubDataConnection

+

Superclass: adx.control.JSONMapper

+
IotHubDataConnection Class representing an iot hub data connection.
+  
+  IotHubDataConnection Properties:
+    xproperties - type: IotHubConnectionProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.IotHubDataConnection.IotHubDataConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.IotHubDataFormat

+

Superclass: adx.control.JSONEnum

+
IotHubDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
Enumeration values:
+  MULTIJSON
+  JSON
+  CSV
+  TSV
+  SCSV
+  SOHSV
+  PSV
+  TXT
+  RAW
+  SINGLEJSON
+  AVRO
+  TSVE
+  PARQUET
+  ORC
+  APACHEAVRO
+  W3CLOGFILE
+
+
+
+

adx.control.models.IotHubDataFormat.IotHubDataFormat

+
IotHubDataFormat The data format of the message. Optionally the data format can be added to each message.
+
+
+
+
+
+

adx.control.models.KeyVaultProperties

+

Superclass: adx.control.JSONMapper

+
KeyVaultProperties Properties of the key vault.
+  
+  KeyVaultProperties Properties:
+    keyName - The name of the key vault key. - type: string
+    keyVersion - The version of the key vault key. - type: string
+    keyVaultUri - The Uri of the key vault. - type: string
+    userIdentity - The user assigned identity (ARM resource id) that has access to the key. - type: string
+
+
+
+

adx.control.models.KeyVaultProperties.KeyVaultProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.LanguageExtension

+

Superclass: adx.control.JSONMapper

+
LanguageExtension The language extension object.
+  
+  LanguageExtension Properties:
+    languageExtensionName - type: LanguageExtensionName
+    languageExtensionImageName - type: LanguageExtensionImageName
+
+
+
+

adx.control.models.LanguageExtension.LanguageExtension

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.LanguageExtensionImageName

+

Superclass: adx.control.JSONEnum

+
LanguageExtensionImageName Language extension image name.
+
+
+
Enumeration values:
+  R
+  Python3_6_5
+  Python3_10_8
+
+
+
+

adx.control.models.LanguageExtensionImageName.LanguageExtensionImageName

+
LanguageExtensionImageName Language extension image name.
+
+
+
+
+
+

adx.control.models.LanguageExtensionName

+

Superclass: adx.control.JSONEnum

+
LanguageExtensionName Language extension that can run within KQL query.
+
+
+
Enumeration values:
+  PYTHON
+  R
+
+
+
+

adx.control.models.LanguageExtensionName.LanguageExtensionName

+
LanguageExtensionName Language extension that can run within KQL query.
+
+
+
+
+
+

adx.control.models.LanguageExtension_1

+

Superclass: adx.control.JSONMapper

+
LanguageExtension_1 The language extension object.
+  
+  LanguageExtension_1 Properties:
+    languageExtensionName - type: LanguageExtensionName
+    languageExtensionImageName - type: LanguageExtensionImageName
+
+
+
+

adx.control.models.LanguageExtension_1.LanguageExtension_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.LanguageExtensionsList

+

Superclass: adx.control.JSONMapper

+
LanguageExtensionsList The list of language extension objects.
+  
+  LanguageExtensionsList Properties:
+    value - The list of language extensions. - type: array of LanguageExtension_1
+
+
+
+

adx.control.models.LanguageExtensionsList.LanguageExtensionsList

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ListResourceSkusResult

+

Superclass: adx.control.JSONMapper

+
ListResourceSkusResult List of available SKUs for a Kusto Cluster.
+  
+  ListResourceSkusResult Properties:
+    value - The collection of available SKUs for an existing resource. - type: array of AzureResourceSku_1
+
+
+
+

adx.control.models.ListResourceSkusResult.ListResourceSkusResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpoint

+

Superclass: adx.control.JSONMapper

+
ManagedPrivateEndpoint Class representing a managed private endpoint.
+  
+  ManagedPrivateEndpoint Properties:
+    xproperties - type: ManagedPrivateEndpointProperties_1
+    systemData - type: systemData
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ManagedPrivateEndpoint.ManagedPrivateEndpoint

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpointListResult

+

Superclass: adx.control.JSONMapper

+
ManagedPrivateEndpointListResult The list managed private endpoints operation response.
+  
+  ManagedPrivateEndpointListResult Properties:
+    value - The list of managed private endpoints. - type: array of ManagedPrivateEndpoint
+
+
+
+

adx.control.models.ManagedPrivateEndpointListResult.ManagedPrivateEndpointListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpointProperties

+

Superclass: adx.control.JSONMapper

+
ManagedPrivateEndpointProperties A class representing the properties of a managed private endpoint object.
+  
+  ManagedPrivateEndpointProperties Properties:
+    privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string
+    privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string
+    groupId - The groupId in which the managed private endpoint is created. - type: string
+    requestMessage - The user request message. - type: string
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.ManagedPrivateEndpointProperties.ManagedPrivateEndpointProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpointProperties_1

+

Superclass: adx.control.JSONMapper

+
ManagedPrivateEndpointProperties_1 A class representing the properties of a managed private endpoint object.
+  
+  ManagedPrivateEndpointProperties_1 Properties:
+    privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string
+    privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string
+    groupId - The groupId in which the managed private endpoint is created. - type: string
+    requestMessage - The user request message. - type: string
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.ManagedPrivateEndpointProperties_1.ManagedPrivateEndpointProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpointsCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
ManagedPrivateEndpointsCheckNameRequest The result returned from a managedPrivateEndpoints check name availability request.
+  
+  ManagedPrivateEndpointsCheckNameRequest Properties:
+    name - Managed private endpoint resource name. - type: string
+    type - The type of resource, for instance Microsoft.Kusto/clusters/managedPrivateEndpoints. - type: string
+
+
+
+

adx.control.models.ManagedPrivateEndpointsCheckNameRequest.ManagedPrivateEndpointsCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_managedPrivateEndpoints
+
+
+
+

adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum.ManagedPrivateEndpointsCheckNameRequestTypeEnum

+
ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.MigrationClusterProperties

+

Superclass: adx.control.JSONMapper

+
MigrationClusterProperties Represents a properties of a cluster that is part of a migration.
+  
+  MigrationClusterProperties Properties:
+    id - The resource ID of the cluster. - type: string
+    uri - The public URL of the cluster. - type: string
+    dataIngestionUri - The public data ingestion URL of the cluster. - type: string
+    role - The role of the cluster in the migration process. - type: string
+
+
+
+

adx.control.models.MigrationClusterProperties.MigrationClusterProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.MigrationClusterPropertiesRoleEnum

+

Superclass: adx.control.JSONEnum

+
MigrationClusterPropertiesRoleEnum No description provided
+
+
+
Enumeration values:
+  Source
+  Destination
+
+
+
+

adx.control.models.MigrationClusterPropertiesRoleEnum.MigrationClusterPropertiesRoleEnum

+
MigrationClusterPropertiesRoleEnum No description provided
+
+
+
+
+
+

adx.control.models.Operation

+

Superclass: adx.control.JSONMapper

+
Operation No description provided
+  
+  Operation Properties:
+    name - This is of the format {provider}/{resource}/{operation}. - type: string
+    display - type: The_object_that_describes_the_operation_
+    origin - type: string
+    xproperties - type: object
+
+
+
+

adx.control.models.Operation.Operation

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OperationListResult

+

Superclass: adx.control.JSONMapper

+
OperationListResult No description provided
+  
+  OperationListResult Properties:
+    value - type: array of Operation
+    nextLink - type: string
+
+
+
+

adx.control.models.OperationListResult.OperationListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OperationResult

+

Superclass: adx.control.JSONMapper

+
OperationResult Operation Result Entity.
+  
+  OperationResult Properties:
+    id - ID of the resource. - type: string
+    name - Name of the resource. - type: string
+    status - type: Status
+    startTime - The operation start time - type: datetime
+    endTime - The operation end time - type: datetime
+    percentComplete - Percentage completed. - type: double
+    xproperties - type: OperationResultProperties
+    error - type: OperationResultErrorProperties
+
+
+
+

adx.control.models.OperationResult.OperationResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OperationResultErrorProperties

+

Superclass: adx.control.JSONMapper

+
OperationResultErrorProperties Operation result error properties
+  
+  OperationResultErrorProperties Properties:
+    code - The code of the error. - type: string
+    message - The error message. - type: string
+
+
+
+

adx.control.models.OperationResultErrorProperties.OperationResultErrorProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OperationResultProperties

+

Superclass: adx.control.JSONMapper

+
OperationResultProperties Operation result properties
+  
+  OperationResultProperties Properties:
+    operationKind - The kind of the operation. - type: string
+    provisioningState - type: ProvisioningState
+    operationState - The state of the operation. - type: string
+
+
+
+

adx.control.models.OperationResultProperties.OperationResultProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OptimizedAutoscale

+

Superclass: adx.control.JSONMapper

+
OptimizedAutoscale A class that contains the optimized auto scale definition.
+  
+  OptimizedAutoscale Properties:
+    version - The version of the template defined, for instance 1. - type: int32
+    isEnabled - A boolean value that indicate if the optimized autoscale feature is enabled or not. - type: logical
+    minimum - Minimum allowed instances count. - type: int32
+    maximum - Maximum allowed instances count. - type: int32
+
+
+
+

adx.control.models.OptimizedAutoscale.OptimizedAutoscale

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpoint

+

Superclass: adx.control.JSONMapper

+
OutboundNetworkDependenciesEndpoint Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to.
+  
+  OutboundNetworkDependenciesEndpoint Properties:
+    xproperties - type: OutboundNetworkDependenciesEndpointProperties
+    etag - A unique read-only string that changes whenever the resource is updated. - type: string
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpoint.OutboundNetworkDependenciesEndpoint

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpointListResult

+

Superclass: adx.control.JSONMapper

+
OutboundNetworkDependenciesEndpointListResult Collection of Outbound Environment Endpoints
+  
+  OutboundNetworkDependenciesEndpointListResult Properties:
+    value - Collection of resources. - type: array of OutboundNetworkDependenciesEndpoint
+    nextLink - Link to next page of resources. - type: string
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpointListResult.OutboundNetworkDependenciesEndpointListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpointProperties

+

Superclass: adx.control.JSONMapper

+
OutboundNetworkDependenciesEndpointProperties Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to.
+  
+  OutboundNetworkDependenciesEndpointProperties Properties:
+    category - The type of service accessed by the Kusto Service Environment, e.g., Azure Storage, Azure SQL Database, and Azure Active Directory. - type: string
+    endpoints - The endpoints that the Kusto Service Environment reaches the service at. - type: array of EndpointDependency
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.OutboundNetworkDependenciesEndpointProperties.OutboundNetworkDependenciesEndpointProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateEndpointConnection

+

Superclass: adx.control.JSONMapper

+
PrivateEndpointConnection A private endpoint connection
+  
+  PrivateEndpointConnection Properties:
+    xproperties - type: PrivateEndpointConnectionProperties
+    systemData - type: systemData
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.PrivateEndpointConnection.PrivateEndpointConnection

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateEndpointConnectionListResult

+

Superclass: adx.control.JSONMapper

+
PrivateEndpointConnectionListResult A list of private endpoint connections
+  
+  PrivateEndpointConnectionListResult Properties:
+    value - Array of private endpoint connections - type: array of PrivateEndpointConnection
+
+
+
+

adx.control.models.PrivateEndpointConnectionListResult.PrivateEndpointConnectionListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateEndpointConnectionProperties

+

Superclass: adx.control.JSONMapper

+
PrivateEndpointConnectionProperties Properties of a private endpoint connection.
+  
+  PrivateEndpointConnectionProperties Properties:
+    privateEndpoint - type: PrivateEndpointProperty
+    privateLinkServiceConnectionState - type: PrivateLinkServiceConnectionStateProperty
+    groupId - Group id of the private endpoint. - type: string
+    provisioningState - Provisioning state of the private endpoint. - type: string
+
+
+
+

adx.control.models.PrivateEndpointConnectionProperties.PrivateEndpointConnectionProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateEndpointProperty

+

Superclass: adx.control.JSONMapper

+
PrivateEndpointProperty Private endpoint which the connection belongs to.
+  
+  PrivateEndpointProperty Properties:
+    id - Resource id of the private endpoint. - type: string
+
+
+
+

adx.control.models.PrivateEndpointProperty.PrivateEndpointProperty

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateLinkResource

+

Superclass: adx.control.JSONMapper

+
PrivateLinkResource A private link resource
+  
+  PrivateLinkResource Properties:
+    xproperties - type: PrivateLinkResourceProperties
+    systemData - type: systemData
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.PrivateLinkResource.PrivateLinkResource

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateLinkResourceListResult

+

Superclass: adx.control.JSONMapper

+
PrivateLinkResourceListResult A list of private link resources
+  
+  PrivateLinkResourceListResult Properties:
+    value - Array of private link resources - type: array of PrivateLinkResource
+
+
+
+

adx.control.models.PrivateLinkResourceListResult.PrivateLinkResourceListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateLinkResourceProperties

+

Superclass: adx.control.JSONMapper

+
PrivateLinkResourceProperties Properties of a private link resource.
+  
+  PrivateLinkResourceProperties Properties:
+    groupId - The private link resource group id. - type: string
+    requiredMembers - The private link resource required member names. - type: array of string
+    requiredZoneNames - The private link resource required zone names. - type: array of string
+
+
+
+

adx.control.models.PrivateLinkResourceProperties.PrivateLinkResourceProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.PrivateLinkServiceConnectionStateProperty

+

Superclass: adx.control.JSONMapper

+
PrivateLinkServiceConnectionStateProperty Connection State of the Private Endpoint Connection.
+  
+  PrivateLinkServiceConnectionStateProperty Properties:
+    status - The private link service connection status. - type: string
+    description - The private link service connection description. - type: string
+    actionsRequired - Any action that is required beyond basic workflow (approve/ reject/ disconnect) - type: string
+
+
+
+

adx.control.models.PrivateLinkServiceConnectionStateProperty.PrivateLinkServiceConnectionStateProperty

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ProvisioningState

+

Superclass: adx.control.JSONEnum

+
ProvisioningState The provisioned state of the resource.
+
+
+
Enumeration values:
+  Running
+  Creating
+  Deleting
+  Succeeded
+  Failed
+  Moving
+  Canceled
+
+
+
+

adx.control.models.ProvisioningState.ProvisioningState

+
ProvisioningState The provisioned state of the resource.
+
+
+
+
+
+

adx.control.models.ProxyResource

+

Superclass: adx.control.JSONMapper

+
ProxyResource The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location
+  
+  ProxyResource Properties:
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ProxyResource.ProxyResource

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabase

+

Superclass: adx.control.JSONMapper

+
ReadOnlyFollowingDatabase Class representing a read only following database.
+  
+  ReadOnlyFollowingDatabase Properties:
+    xproperties - type: ReadOnlyFollowingDatabaseProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabase.ReadOnlyFollowingDatabase

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000

+

Superclass: adx.control.JSONEnum

+
ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided
+
+
+
Enumeration values:
+  Union
+  Replace
+  None
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000

+
ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided
+
+
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001

+

Superclass: adx.control.JSONEnum

+
ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided
+
+
+
Enumeration values:
+  Union
+  Replace
+  None
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001

+
ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided
+
+
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProperties

+

Superclass: adx.control.JSONMapper

+
ReadOnlyFollowingDatabaseProperties Class representing the Kusto database properties.
+  
+  ReadOnlyFollowingDatabaseProperties Properties:
+    provisioningState - type: ProvisioningState
+    softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string
+    hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string
+    statistics - type: DatabaseStatistics
+    leaderClusterResourceId - The name of the leader cluster - type: string
+    attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string
+    principalsModificationKind - The principals modification kind of the database - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+    originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string
+    databaseShareOrigin - type: DatabaseShareOrigin
+    suspensionDetails - type: SuspensionDetails
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProperties.ReadOnlyFollowingDatabaseProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProperties_1

+

Superclass: adx.control.JSONMapper

+
ReadOnlyFollowingDatabaseProperties_1 Class representing the Kusto database properties.
+  
+  ReadOnlyFollowingDatabaseProperties_1 Properties:
+    provisioningState - type: ProvisioningState
+    softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string
+    hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string
+    statistics - type: DatabaseStatistics
+    leaderClusterResourceId - The name of the leader cluster - type: string
+    attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string
+    principalsModificationKind - The principals modification kind of the database - type: string
+    tableLevelSharingProperties - type: TableLevelSharingProperties
+    originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string
+    databaseShareOrigin - type: DatabaseShareOrigin
+    suspensionDetails - type: SuspensionDetails
+
+
+
+

adx.control.models.ReadOnlyFollowingDatabaseProperties_1.ReadOnlyFollowingDatabaseProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadWriteDatabase

+

Superclass: adx.control.JSONMapper

+
ReadWriteDatabase Class representing a read write database.
+  
+  ReadWriteDatabase Properties:
+    xproperties - type: ReadWriteDatabaseProperties_1
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.ReadWriteDatabase.ReadWriteDatabase

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadWriteDatabaseProperties

+

Superclass: adx.control.JSONMapper

+
ReadWriteDatabaseProperties Class representing the Kusto database properties.
+  
+  ReadWriteDatabaseProperties Properties:
+    provisioningState - type: ProvisioningState
+    softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string
+    hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string
+    statistics - type: DatabaseStatistics
+    isFollowed - Indicates whether the database is followed. - type: logical
+    keyVaultProperties - type: KeyVaultProperties
+    suspensionDetails - type: SuspensionDetails
+
+
+
+

adx.control.models.ReadWriteDatabaseProperties.ReadWriteDatabaseProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ReadWriteDatabaseProperties_1

+

Superclass: adx.control.JSONMapper

+
ReadWriteDatabaseProperties_1 Class representing the Kusto database properties.
+  
+  ReadWriteDatabaseProperties_1 Properties:
+    provisioningState - type: ProvisioningState
+    softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string
+    hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string
+    statistics - type: DatabaseStatistics
+    isFollowed - Indicates whether the database is followed. - type: logical
+    keyVaultProperties - type: KeyVaultProperties
+    suspensionDetails - type: SuspensionDetails
+
+
+
+

adx.control.models.ReadWriteDatabaseProperties_1.ReadWriteDatabaseProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.Resource

+

Superclass: adx.control.JSONMapper

+
Resource Common fields that are returned in the response for all Azure Resource Manager resources
+  
+  Resource Properties:
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.Resource.Resource

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ResourceSkuCapabilities

+

Superclass: adx.control.JSONMapper

+
ResourceSkuCapabilities Describes The SKU capabilities object.
+  
+  ResourceSkuCapabilities Properties:
+    name - An invariant to describe the feature. - type: string
+    value - An invariant if the feature is measured by quantity. - type: string
+
+
+
+

adx.control.models.ResourceSkuCapabilities.ResourceSkuCapabilities

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ResourceSkuZoneDetails

+

Superclass: adx.control.JSONMapper

+
ResourceSkuZoneDetails Describes The zonal capabilities of a SKU.
+  
+  ResourceSkuZoneDetails Properties:
+    name - The set of zones that the SKU is available in with the specified capabilities. - type: array of string
+    capabilities - A list of capabilities that are available for the SKU in the specified list of zones. - type: array of ResourceSkuCapabilities
+
+
+
+

adx.control.models.ResourceSkuZoneDetails.ResourceSkuZoneDetails

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.Script

+

Superclass: adx.control.JSONMapper

+
Script Class representing a database script.
+  
+  Script Properties:
+    xproperties - type: ScriptProperties_1
+    systemData - type: systemData
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.Script.Script

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ScriptCheckNameRequest

+

Superclass: adx.control.JSONMapper

+
ScriptCheckNameRequest A script name availability request.
+  
+  ScriptCheckNameRequest Properties:
+    name - Script name. - type: string
+    type - The type of resource, Microsoft.Kusto/clusters/databases/scripts. - type: string
+
+
+
+

adx.control.models.ScriptCheckNameRequest.ScriptCheckNameRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ScriptCheckNameRequestTypeEnum

+

Superclass: adx.control.JSONEnum

+
ScriptCheckNameRequestTypeEnum No description provided
+
+
+
Enumeration values:
+  Microsoft_Kusto_clusters_databases_scripts
+
+
+
+

adx.control.models.ScriptCheckNameRequestTypeEnum.ScriptCheckNameRequestTypeEnum

+
ScriptCheckNameRequestTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.ScriptListResult

+

Superclass: adx.control.JSONMapper

+
ScriptListResult The list Kusto database script operation response.
+  
+  ScriptListResult Properties:
+    value - The list of Kusto scripts. - type: array of Script
+
+
+
+

adx.control.models.ScriptListResult.ScriptListResult

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ScriptProperties

+

Superclass: adx.control.JSONMapper

+
ScriptProperties A class representing database script property.
+  
+  ScriptProperties Properties:
+    scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string
+    scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string
+    scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string
+    forceUpdateTag - A unique string. If changed the script will be applied again. - type: string
+    continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.ScriptProperties.ScriptProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.ScriptProperties_1

+

Superclass: adx.control.JSONMapper

+
ScriptProperties_1 A class representing database script property.
+  
+  ScriptProperties_1 Properties:
+    scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string
+    scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string
+    scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string
+    forceUpdateTag - A unique string. If changed the script will be applied again. - type: string
+    continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical
+    provisioningState - type: ProvisioningState
+
+
+
+

adx.control.models.ScriptProperties_1.ScriptProperties_1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.SkuDescription

+

Superclass: adx.control.JSONMapper

+
SkuDescription The Kusto SKU description of given resource type
+  
+  SkuDescription Properties:
+    resourceType - The resource type - type: string
+    name - The name of the SKU - type: string
+    tier - The tier of the SKU - type: string
+    locations - The set of locations that the SKU is available - type: array of string
+    locationInfo - Locations and zones - type: array of SkuLocationInfoItem
+    restrictions - The restrictions because of which SKU cannot be used - type: array of object
+
+
+
+

adx.control.models.SkuDescription.SkuDescription

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.SkuDescriptionList

+

Superclass: adx.control.JSONMapper

+
SkuDescriptionList The list of the EngagementFabric SKU descriptions
+  
+  SkuDescriptionList Properties:
+    value - SKU descriptions - type: array of SkuDescription
+
+
+
+

adx.control.models.SkuDescriptionList.SkuDescriptionList

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.SkuLocationInfoItem

+

Superclass: adx.control.JSONMapper

+
SkuLocationInfoItem The locations and zones info for SKU.
+  
+  SkuLocationInfoItem Properties:
+    location - The available location of the SKU. - type: string
+    zones - The available zone of the SKU. - type: array of string
+    zoneDetails - Gets details of capabilities available to a SKU in specific zones. - type: array of ResourceSkuZoneDetails
+
+
+
+

adx.control.models.SkuLocationInfoItem.SkuLocationInfoItem

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.Status

+

Superclass: adx.control.JSONEnum

+
Status The status of operation.
+
+
+
Enumeration values:
+  Succeeded
+  Canceled
+  Failed
+  Running
+
+
+
+

adx.control.models.Status.Status

+
Status The status of operation.
+
+
+
+
+
+

adx.control.models.SuspensionDetails

+

Superclass: adx.control.JSONMapper

+
SuspensionDetails The database suspension details. If the database is suspended, this object contains information related to the database''s suspension state.
+  
+  SuspensionDetails Properties:
+    suspensionStartDate - The starting date and time of the suspension state. - type: datetime
+
+
+
+

adx.control.models.SuspensionDetails.SuspensionDetails

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.TableLevelSharingProperties

+

Superclass: adx.control.JSONMapper

+
TableLevelSharingProperties Tables that will be included and excluded in the follower database
+  
+  TableLevelSharingProperties Properties:
+    tablesToInclude - List of tables to include in the follower database - type: array of string
+    tablesToExclude - List of tables to exclude from the follower database - type: array of string
+    externalTablesToInclude - List of external tables to include in the follower database - type: array of string
+    externalTablesToExclude - List of external tables to exclude from the follower database - type: array of string
+    materializedViewsToInclude - List of materialized views to include in the follower database - type: array of string
+    materializedViewsToExclude - List of materialized views to exclude from the follower database - type: array of string
+    functionsToInclude - List of functions to include in the follower database - type: array of string
+    functionsToExclude - List of functions to exclude from the follower database - type: array of string
+
+
+
+

adx.control.models.TableLevelSharingProperties.TableLevelSharingProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.The_object_that_describes_the_operation_

+

Superclass: adx.control.JSONMapper

+
The_object_that_describes_the_operation_ No description provided
+  
+  The_object_that_describes_the_operation_ Properties:
+    provider - type: string
+    operation - For example: read, write, delete. - type: string
+    resource - type: string
+    description - type: string
+
+
+
+

adx.control.models.The_object_that_describes_the_operation_.The_object_that_describes_the_operation_

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.TrackedResource

+

Superclass: adx.control.JSONMapper

+
TrackedResource The resource model definition for an Azure Resource Manager tracked top level resource which has ''tags'' and a ''location''
+  
+  TrackedResource Properties:
+    tags - Resource tags. - type: adx.control.JSONMapperMap
+    location - The geo-location where the resource lives - type: string
+    id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string
+    name - The name of the resource - type: string
+    type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string
+
+
+
+

adx.control.models.TrackedResource.TrackedResource

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.TrustedExternalTenant

+

Superclass: adx.control.JSONMapper

+
TrustedExternalTenant Represents a tenant ID that is trusted by the cluster.
+  
+  TrustedExternalTenant Properties:
+    value - GUID representing an external tenant. - type: string
+
+
+
+

adx.control.models.TrustedExternalTenant.TrustedExternalTenant

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.VirtualNetworkConfiguration

+

Superclass: adx.control.JSONMapper

+
VirtualNetworkConfiguration A class that contains virtual network definition.
+  
+  VirtualNetworkConfiguration Properties:
+    subnetId - The subnet resource id. - type: string
+    enginePublicIpId - Engine service''s public IP address resource id. - type: string
+    dataManagementPublicIpId - Data management''s service public IP address resource id. - type: string
+
+
+
+

adx.control.models.VirtualNetworkConfiguration.VirtualNetworkConfiguration

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.systemData

+

Superclass: adx.control.JSONMapper

+
systemData Metadata pertaining to creation and last modification of the resource.
+  
+  systemData Properties:
+    createdBy - The identity that created the resource. - type: string
+    createdByType - The type of identity that created the resource. - type: string
+    createdAt - The timestamp of resource creation (UTC). - type: datetime
+    lastModifiedBy - The identity that last modified the resource. - type: string
+    lastModifiedByType - The type of identity that last modified the resource. - type: string
+    lastModifiedAt - The timestamp of resource last modification (UTC) - type: datetime
+
+
+
+

adx.control.models.systemData.systemData

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.control.models.systemDataCreatedByTypeEnum

+

Superclass: adx.control.JSONEnum

+
systemDataCreatedByTypeEnum No description provided
+
+
+
Enumeration values:
+  User
+  Application
+  ManagedIdentity
+  Key
+
+
+
+

adx.control.models.systemDataCreatedByTypeEnum.systemDataCreatedByTypeEnum

+
systemDataCreatedByTypeEnum No description provided
+
+
+
+
+
+

adx.control.models.systemDataLastModifiedByTypeEnum

+

Superclass: adx.control.JSONEnum

+
systemDataLastModifiedByTypeEnum No description provided
+
+
+
Enumeration values:
+  User
+  Application
+  ManagedIdentity
+  Key
+
+
+
+

adx.control.models.systemDataLastModifiedByTypeEnum.systemDataLastModifiedByTypeEnum

+
systemDataLastModifiedByTypeEnum No description provided
+
+
+
+
+
+

adx.control.BaseClient

+

Superclasses: handle, matlab.mixin.CustomDisplay

+
BASECLIENT Base class for RESTful adx services.
+  Includes common initialization and authentication code. Authentication
+  code may have to be manually updated after code generation.
+ 
+  This class cannot be instantiated directly, work with classes derived
+  from it to actually interact with the RESTful service.
+
+
+
+

adx.control.BaseClient.BaseClient

+
adx.control.BaseClient constructor to be called from
+  derived classes to allow setting properties upon construction
+
+
+
+
+

adx.control.BaseClient.applyCookies

+
adx.control.BaseClient/applyCookies is a function.
+    request = applyCookies(obj, request, uri)
+
+
+
+
+

adx.control.BaseClient.getOAuthToken

+
GETOAUTHTOKEN called by requestAuth to obtain OAuth token.
+ 
+  To be customized after code generation.
+ 
+  This template method simply returns the bearerToken of the object
+  which is assumed to have been manually set after manually having
+  completed the OAuth flow. Typically this method should be
+  customized to return a properly cached still valid token, refresh
+  an cached expired token just-in-time or perform the entire OAuth
+  flow from the start just-in-time and cache the token.
+ 
+  As the exact OAuth flow may vary by OAuth provider, the full
+  authentication flow is not automatically generated and the
+  template method simply returns the bearerToken property.
+
+
+
+
+

adx.control.BaseClient.getPropertyGroups

+
Redact properties such that tokens, etc. do not show up
+  in Command Window output
+
+
+
+
+

adx.control.BaseClient.loadConfigFile

+
Loads client and http properties from a JSON file
+
+
+
+
+

adx.control.BaseClient.postSend

+
POSTSEND is called by every operation right after sending the
+  request. This method can for example be customized to add
+  customized error handling if the API responds to errors in a
+  consistent way.
+ 
+  If the responses of only a few operations need to be customized
+  it is recommended to modify the generated operation methods
+  in the Api classes themselves rather than modifying postSend.
+ 
+  By default the generated postSend does not do anything, it just
+  returns the response as is.
+
+
+
+
+

adx.control.BaseClient.preSend

+
PRESEND is called by every operation right before sending the
+  request. This method can for example be customized to add a
+  header to all (or most) requests if needed.
+ 
+  If the requests of only a few operations need to be customized
+  it is recommended to modify the generated operation methods
+  in the Api classes themselves rather than modifying preSend.
+ 
+  By default the generated preSend does not do anything, it just
+  returns the inputs as is.
+
+
+
+
+

adx.control.BaseClient.requestAuth

+
REQUESTAUTH will be called by operations which require
+  authentication. May have to be extended or modified after code
+  generation. For example, authentication methods not present in the
+  service OpenAPI spec or methods not directly supported by the
+  generator will have to be added. Generated logic may also not be
+  100% correct if the OpenAPI spec contained multiple different
+  authentication methods of the same type.
+
+
+
+
+

adx.control.BaseClient.setCookies

+
adx.control.BaseClient/setCookies is a function.
+    setCookies(obj, history)
+
+
+
+
+
+

adx.control.CookieJar

+

Superclass: handle

+
COOKIEJAR helper class in MATLAB Generator for OpenAPI package,
+  provides a cookie jar. A cookie jar holds cookies which are typically 
+  set by Set-Cookie headers in HTTP(S) requests and it can return the
+  cookies which should be included in a request to a given URL.
+ 
+  CookieJar Properties:
+    path       - Directory where to save cookies.mat
+ 
+  CookieJar Methods:
+    setCookies - Adds cookies to the jar.
+    getCookies - Return an array of cookies which match the given URL
+ 
+    persist    - Forces cookie jar to be saved to disk
+    load       - Forces cookie jar to be loaded from disk
+    purge      - Empties the entire cookie jar and deletes cookies from
+                 disk
+
+
+
+

adx.control.CookieJar.CookieJar

+
COOKIEJAR helper class in MATLAB Generator for OpenAPI package,
+  provides a cookie jar. A cookie jar holds cookies which are typically 
+  set by Set-Cookie headers in HTTP(S) requests and it can return the
+  cookies which should be included in a request to a given URL.
+ 
+  CookieJar Properties:
+    path       - Directory where to save cookies.mat
+ 
+  CookieJar Methods:
+    setCookies - Adds cookies to the jar.
+    getCookies - Return an array of cookies which match the given URL
+ 
+    persist    - Forces cookie jar to be saved to disk
+    load       - Forces cookie jar to be loaded from disk
+    purge      - Empties the entire cookie jar and deletes cookies from
+                 disk
+
+
+
+
+

adx.control.CookieJar.getCookies

+
GETCOOKIES returns an array of matlab.net.http.Cookie for the
+  given URI which must be provided as first input.
+
+
+
+
+

adx.control.CookieJar.load

+
LOAD forces cookie jar to be loaded from disk. This method is
+  also called automatically by the constructor. Can be called
+  with a alternative directory as input to force saving
+  cookies.mat to this alternative location. The CookieJar
+  instance is then also reconfigured to continue working with
+  this new location.
+
+
+
+
+

adx.control.CookieJar.persist

+
PERSIST forces cookie jar to be saved to disk. This method is
+  also called automatically by setCookies if new cookies are
+  added. Can be called with a alternative directory as input to
+  force saving cookies.mat to this alternative location. The
+  CookieJar instance is then also reconfigured to continue 
+  working with this new location.
+
+
+
+
+

adx.control.CookieJar.purge

+
PURGE completely empties the cookie jar and also deletes
+  cookies.mat from disk.
+
+
+
+
+

adx.control.CookieJar.setCookies

+
SETCOOKIES Adds cookies to the jar. Expects an array of
+  matlab.net.http.CookieInfo as input. This can for example be
+  obtained using matlab.net.http.CookieInfo.collectFromLog or
+  by manually instantiating matlab.net.http.CookieInfo.
+ 
+  See Also: matlab.net.http.CookieInfo.collectFromLog
+
+
+
+
+
+

adx.control.JSONEnum

+
JSONEnum Base class for enumerations when working with adx.control.JSONMapper
+  When adding enumeration properties to adx.control.JSONMapper objects, the custom
+  enumeration classes must inherit from this JSONEnum base class. And
+  the custom enumeration class must declare string values for each enum
+  element, these represent the JSON representation of the enumeration
+  values; this is required since not all JSON values are guaranteed to
+  be valid MATLAB variable names whereas the actual MATLAB enumeration
+  values must be.
+ 
+    Example:
+ 
+      classdef myEnum < JSONEnum
+          enumeration
+              VAL1 ("VAL.1")
+              VAL2 ("VAL.2")
+          end
+      end
+ 
+  Even if JSON values are valid MATLAB variables, the string value must
+  be provided, e.g.:
+ 
+      classdef myEnum < JSONEnum
+          enumeration
+              VAL1 ("VAL1")
+              VAL2 ("VAL2")
+          end
+      end
+
+
+
+

adx.control.JSONEnum.JSONEnum

+
JSONEnum Base class for enumerations when working with adx.control.JSONMapper
+  When adding enumeration properties to adx.control.JSONMapper objects, the custom
+  enumeration classes must inherit from this JSONEnum base class. And
+  the custom enumeration class must declare string values for each enum
+  element, these represent the JSON representation of the enumeration
+  values; this is required since not all JSON values are guaranteed to
+  be valid MATLAB variable names whereas the actual MATLAB enumeration
+  values must be.
+ 
+    Example:
+ 
+      classdef myEnum < JSONEnum
+          enumeration
+              VAL1 ("VAL.1")
+              VAL2 ("VAL.2")
+          end
+      end
+ 
+  Even if JSON values are valid MATLAB variables, the string value must
+  be provided, e.g.:
+ 
+      classdef myEnum < JSONEnum
+          enumeration
+              VAL1 ("VAL1")
+              VAL2 ("VAL2")
+          end
+      end
+
+
+
+
+

adx.control.JSONEnum.fromJSON

+
adx.control.JSONEnum/fromJSON is a function.
+    v = fromJSON(obj, json)
+
+
+
+
+
+

adx.control.JSONMapper

+

Superclass: handle

+
adx.control.JSONMapper base class - adds JSON serialization and deserialization.
+  Derive MATLAB classes from this class to allow them to be
+  deserialized from JSON mapping the JSON fields to the class
+  properties. To allow proper nesting of object, derived objects must
+  call the adx.control.JSONMapper constructor from their constructor:
+ 
+  function obj = myClass(s,inputs)
+      arguments
+          s {adx.control.JSONMapper.ConstructorArgument} = []
+          inputs.?myClass
+      end
+      obj@adx.control.JSONMapper(s,inputs);
+  end
+ 
+  Make sure to update the class name (myClass in the example) in both
+  the function name as well as in the arguments block.
+ 
+  During serialization or deserialization the MATLAB object definition
+  is leading. JSON data is converted to MATLAB data types based on the
+  type declaration in MATLAB. Therefore all properties of the MATLAB
+  class *must* have a type declaration. Also, fields are only
+  deserialized if they actually exist on the MATLAB class, any
+  additional fields in the JSON input are ignored.
+ 
+  Supported property datatypes: double, float, uint8, int8, uint16,
+  int16, uint32, int32, uint64, int64, logical, enum, string, char,
+  datetime (must be annotated), containers.Map, classes derived from
+  adx.control.JSONMapper.
+ 
+  Annotations can be added to properties as "validation functions".
+ 
+  adx.control.JSONMapper Methods:
+ 
+    fieldName      - allows property to be mapped to a JSON field with
+                     different name
+    JSONArray      - specifies field is a JSON array
+    epochDatetime  - for datetime properties specifies in JSON the date
+                     time is encoded as epoch. Must be the first
+                     attribute if used
+    stringDatetime - for datetime properties specifies in JSON the date
+                     time is encoded as string with a particular format.
+                     Must be the first attribute if used.
+    doNotParse     - indicate that a field's JSON should not be parsed.
+                     if JSONArray is also applied the field will be
+                     parsed at the array level.
+
+
+
+

adx.control.JSONMapper.ConstructorArgument

+
CONSTRUCTORARGUMENT to be used in derived constructors to
+  allow string or char arrays as input and allows the
+  constructor to be used when working with nested adx.control.JSONMapper
+  derived classes.
+
+
+
+
+

adx.control.JSONMapper.JSONArray

+
JSONARRAY adx.control.JSONMapper Annotation
+  Specified that the JSON field is an array.
+ 
+  Ensures that when serializing a MATLAB scalar it is in fact
+  encoded as a JSON array rather than a scalar if the property
+  has been annotated with this option.
+
+
+
+
+

adx.control.JSONMapper.JSONMapper

+
adx.control.JSONMapper Constructor. Call this from
+  derived classes constructors:
+ 
+  function obj = myClass(s,inputs)
+      arguments
+          s {adx.control.JSONMapper.ConstructorArgument} = []
+          inputs.?myClass
+      end
+      obj@adx.control.JSONMapper(s,inputs);
+  end
+ 
+  Make sure to update the class name (myClass in the example)
+  in both the function name as well as in the arguments block.
+
+
+
+
+

adx.control.JSONMapper.doNotParse

+
adx.control.JSONMapper.doNotParse is a function.
+    adx.control.JSONMapper.doNotParse(~)
+
+
+
+
+

adx.control.JSONMapper.epochDatetime

+
EPOCHDATETIME adx.control.JSONMapper Annotation
+  When working with datetime fields either epochDatetime or
+  stringDatetime annotation is required to specify how the
+  datetime is encoded in JSON. This must be the first
+  annotation.
+ 
+  When called without inputs POSIX time/UNIX timestamp is
+  assumed.
+ 
+  Optional Name-Value pairs TimeZone, Epoch and TicksPerSecond
+  can be provided (their meaning is the same as when working
+  with datetime(d,'ConvertFrom','epochtime', OPTIONS).
+ 
+  Example:
+ 
+    properties
+        % start_date is a UNIX timestamp
+        start_date {adx.control.JSONMapper.epochDatetime}
+        % end_date is UNIX timestamp in milliseconds
+        end_date {adx.control.JSONMapper.epochDatetime(end_date,'TicksPerSecond',1000)}
+    end
+
+
+
+
+

adx.control.JSONMapper.fieldName

+
FIELDNAME adx.control.JSONMapper Annotation
+  This can be added to properties if the MATLAB property name
+  and JSON field name differ. For example, when the JSON field
+  name is not a valid MATLAB identifier.
+ 
+  Example:
+ 
+    properties
+        some_field {adx.control.JSONMapper.fieldName(some_field,"some.field")}
+    end
+
+
+
+
+

adx.control.JSONMapper.fromJSON

+
adx.control.JSONMapper/fromJSON is a function.
+    obj = fromJSON(obj, json)
+
+
+
+
+

adx.control.JSONMapper.getPayload

+
GETPAYLOAD JSON encodes the object taking into account
+  required and optional properties.
+ 
+  Verifies that required properties have indeed been set.
+  Includes optional properties in the output. All other
+  properties are not included in the output.
+
+
+
+
+

adx.control.JSONMapper.jsonencode

+
JSONENCODE serializes object as JSON
+  Can serialize whole hierarchies of objects if all classes
+  in the hierarchy derive from adx.control.JSONMapper.
+ 
+  The function should only ever be called with one input: the
+  object to be serialized. The second input is only meant to be
+  used internally when jsonencode is called recursively.
+ 
+  Example:
+ 
+    json = jsonencode(obj);
+
+
+
+
+

adx.control.JSONMapper.stringDatetime

+
STRINGDATETIME adx.control.JSONMapper Annotation
+  When working with datetime fields either epochDatetime or
+  stringDatetime annotation is required to specify how the
+  datetime is encoded in JSON. This must be the first
+  annotation.
+ 
+  stringDatetime requires the string format as input.
+ 
+  Optional Name-Value pair TimeZone can be provided.
+ 
+  Example:
+ 
+    properties
+        start_date {adx.control.JSONMapper.stringDatetime(start_date,'yyyy-MM-dd''T''HH:mm:ss')}
+    end
+
+
+
+
+
+

adx.control.JSONMapperMap

+

Superclass: handle

+
JSONMAPPERMAP Alternative to containers.Map for free-form key-value
+  pairs. The advantage of JSONMAPPERMAP over containers.Map is that
+  instances are not shared when used as a class property.
+
+
+
+

adx.control.JSONMapperMap.JSONMapperMap

+
JSONMAPPERMAP Constructor. Can be called with key value pairs
+  as input to initialize the map with those keys and values.
+
+
+
+
+

adx.control.JSONMapperMap.disp

+
DISP Displays keys and corresponding values in the map.
+
+
+
+
+

adx.control.JSONMapperMap.jsonencode

+
JSONENCODE JSON encodes the map.
+
+
+
+
+

adx.control.JSONMapperMap.subsasgn

+
SUBSASGN Assign or update a key-value pair in the map.
+
+
+
+
+

adx.control.JSONMapperMap.subsref

+
SUBSREF retrieve a key value from the map.
+
+
+
+
+
+

adx.control.JSONPropertyInfo

+

Superclass: handle

+
JSONPROPERTYINFO class used by adx.control.JSONMapper internally
+
+
+
+

adx.control.JSONPropertyInfo.JSONPropertyInfo

+
JSONPROPERTYINFO class used by adx.control.JSONMapper internally
+
+
+
+
+

adx.control.JSONPropertyInfo.getPropertyInfo

+
For all public properties
+
+
+
+
+
+

adx.data

+
+
+

adx.data.api

+
+
+

adx.data.api.Ingest

+

Superclass: adx.control.BaseClient

+
Ingest Class to run an ingest command
+
+
+
+

adx.data.api.Ingest.Ingest

+
Call base constructor to override any configured settings
+
+
+
+
+

adx.data.api.Ingest.ingestRun

+
ingestRun
+
+
+
+
+
+

adx.data.api.Management

+

Superclass: adx.control.BaseClient

+
Management Class to run a management command
+
+
+
+

adx.data.api.Management.Management

+
Call base constructor to override any configured settings
+
+
+
+
+

adx.data.api.Management.getPropertyGroups

+
Redact properties such that tokens, etc. do not show up
+  in Command Window output
+
+Help for adx.data.api.Management/getPropertyGroups is inherited from superclass adx.control.BaseClient
+
+
+
+
+

adx.data.api.Management.managementRun

+
managementRun
+
+
+
+
+
+

adx.data.api.Query

+

Superclass: adx.control.BaseClient

+
Query Class to run a KQL query
+ 
+  Example:
+     % Build a request object
+     request = adx.data.models.QueryRequest();
+     colName = "myColumn";
+     message = "Hello World";
+     
+     % Set the KQL query fields
+     request.csl = sprintf('print %s="%s"', colName, message);
+     % Don't set the database use the default in .json config file
+     % request.db = "myDatabaseName"
+     % No adx.data.models.ClientRequestProperties required
+     % request.requestProperties
+ 
+     % Create the Query object and run the request
+     query = adx.data.api.Query();
+     % The default cluster to use is configured using a .json configuration file
+     % Run the query:
+     [code, result, response, requestId] = query.queryRun(request); %#ok<ASGLU>
+ 
+     if code == matlab.net.http.StatusCode.OK
+         % Convert the response to Tables
+         hwTable = mathworks.internal.adx.queryV2Response2Tables(result);
+         fprintf("Query (%s) result:\n", request.csl);
+         disp(hwTable);
+     else
+         error('Error running query: %s', request.csl);
+  end
+
+
+
+

adx.data.api.Query.Query

+
Call base constructor to override any configured settings
+
+
+
+
+

adx.data.api.Query.queryRun

+
queryRun Runs a KQL query
+ 
+  Required argument(s)
+    queryRequest: A populated adx.data.models.QueryRequest that defines the
+                  query, the database and potentially query properties.
+ 
+  Optional named arguments:
+    cluster: A cluster URL as a scalar string.
+ 
+    apiVersion: URL path API version field, if not provided and the query starts
+                with "." v1 is used otherwise v2 is used.
+ 
+    skipRowsArrayDecode: Returns a adx.data.models.QueryV2ResponseUnparsedRows where
+                         the frames are parsed but the array of rows are not parsed
+                         into individual values if true. Otherwise a
+                         adx.data.models.QueryV2ResponseRaw is returned.
+                         Only applied in the case of v2 APIs.
+                         Default is false.
+ 
+    skipResponseDecode: Logical flag to determine if the HTTP response should be
+                        be parsed at all. If true the result is returned as a
+                        adx.data.models.QueryV2ResponseRaw.empty or a 
+                        adx.data.models.QueryV1ResponseRaw.empty as appropriate.
+                        Default is false.
+ 
+    verbose: Logical to enable additional output. Default is false.
+ 
+  Return values:
+    code: HTTP status code, 200 (matlab.net.http.StatusCode.OK) indicates success.
+ 
+    result: Returned data is various forms or an ErrorResponse:
+            adx.control.models.ErrorResponse
+            adx.data.models.QueryV2ResponseRaw
+            adx.data.models.QueryV2ResponseUnparsedRows
+            adx.data.models.QueryV1ResponseRaw
+ 
+    response: The original HTTP response to the matlab.net.http.RequestMessage.send
+              The response may have been optionally processed by the baseClient
+              postSend method.
+ 
+   requestId: A UUID value generated and submitted with the query to
+              identify it.
+
+
+
+
+
+

adx.data.models

+
+
+

adx.data.models.ClientRequestProperties

+

Superclass: adx.control.JSONMapper

+
ClientRequestProperties Adds ClientRequestPropertiesOptions to a query
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement
+
+
+
+

adx.data.models.ClientRequestProperties.ClientRequestProperties

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.ClientRequestPropertiesOptions

+

Superclass: adx.control.JSONMapper

+
ClientRequestPropertiesOptions Request properties control how a query or command executes and returns results
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/request-properties#clientrequestproperties-options
+
+
+
+

adx.data.models.ClientRequestPropertiesOptions.ClientRequestPropertiesOptions

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.Column

+

Superclass: adx.control.JSONMapper

+
Column Represents a Column in a v2 API response
+
+
+
+

adx.data.models.Column.Column

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.ColumnV1

+

Superclass: adx.control.JSONMapper

+
ColumnV1 Represents a Column in a v1 API response
+
+
+
+

adx.data.models.ColumnV1.ColumnV1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataSetCompletion

+

Superclass: adx.control.JSONMapper

+
DataSetCompletion Final field of a v2 response
+
+
+
+

adx.data.models.DataSetCompletion.DataSetCompletion

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataSetHeader

+

Superclass: adx.control.JSONMapper

+
DataSetHeader Header field of a v2 response
+
+
+
+

adx.data.models.DataSetHeader.DataSetHeader

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataTable

+

Superclass: adx.control.JSONMapper

+
DataTable Represents a v1 API format table
+
+
+
+

adx.data.models.DataTable.DataTable

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataTableV1

+

Superclass: adx.control.JSONMapper

+
DataTableV1 Represents a v1 API format table
+
+
+
+

adx.data.models.DataTableV1.DataTableV1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataTables

+

Superclass: adx.control.JSONMapper

+
DataTables Represents an array of v2 API tables
+
+
+
+

adx.data.models.DataTables.DataTables

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.DataTablesV1

+

Superclass: adx.control.JSONMapper

+
DataTablesV1 Represents an array of v1 API tables
+
+
+
+

adx.data.models.DataTablesV1.DataTablesV1

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.IngestionResourcesSnapshot

+
INGESTIONRESOURCESSNAPSHOT Contains result of .get ingestion resources request
+ 
+  Example:
+ 
+    managementClient = adx.data.api.Management();
+    [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources'));
+    if code == matlab.net.http.StatusCode.OK
+        irs = adx.data.models.IngestionResourcesSnapshot(result);
+    end
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/kusto-ingest-client-rest#retrieve-ingestion-resources
+
+
+
+

adx.data.models.IngestionResourcesSnapshot.IngestionResourcesSnapshot

+
INGESTIONRESOURCESSNAPSHOT Constructor for IngestionResourcesSnapshot object
+
+
+
+
+

adx.data.models.IngestionResourcesSnapshot.table

+
TABLE Convert a IngestionResourcesSnapshot Data property to a MATLAB table
+
+
+
+
+
+

adx.data.models.ManagementRequest

+

Superclass: adx.control.JSONMapper

+
ManagementRequest Defines a Request Object for a management query
+  If a database field is defined in the default configuration file
+  location its value will be used for the db property.
+
+
+
+

adx.data.models.ManagementRequest.ManagementRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.QueryParameter

+

Superclass: adx.control.JSONMapper

+
QueryParameter Represents Key Value pairs for queries
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement
+
+
+
+

adx.data.models.QueryParameter.QueryParameter

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.QueryRequest

+

Superclass: adx.control.JSONMapper

+
QueryRequest Defines a Request Object for a query
+  If a database field is defined in the default configuration file
+  location its value will be used for the db property.
+
+
+
+

adx.data.models.QueryRequest.QueryRequest

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.QueryV1ResponseRaw

+

Superclass: adx.control.JSONMapper

+
QueryV1ResponseRaw Represents a v1 API response prior to conversion to a table or error
+
+
+
+

adx.data.models.QueryV1ResponseRaw.QueryV1ResponseRaw

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.QueryV2ResponseRaw

+

Superclass: adx.control.JSONMapper

+
QueryV2ResponseRaw Represents a v2 API response prior to conversion to a table or error
+
+
+
+

adx.data.models.QueryV2ResponseRaw.QueryV2ResponseRaw

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+

adx.data.models.QueryV2ResponseRaw.getDataSetCompletionFrame

+
adx.data.models.QueryV2ResponseRaw/getDataSetCompletionFrame is a function.
+    dataSetCompletion = getDataSetCompletionFrame(obj)
+
+
+
+
+

adx.data.models.QueryV2ResponseRaw.getDataSetHeader

+
adx.data.models.QueryV2ResponseRaw/getDataSetHeader is a function.
+    dataSetHeader = getDataSetHeader(obj)
+
+
+
+
+
+

adx.data.models.QueryV2ResponseUnparsedRows

+

Superclass: adx.control.JSONMapper

+
QueryV2ResponseUnparsedRows Represents a v2 API response prior to conversion to a table or error Rows are not parsed
+
+
+
+

adx.data.models.QueryV2ResponseUnparsedRows.QueryV2ResponseUnparsedRows

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+

adx.data.models.QueryV2ResponseUnparsedRows.getDataSetCompletionFrame

+
adx.data.models.QueryV2ResponseUnparsedRows/getDataSetCompletionFrame is a function.
+    dataSetCompletion = getDataSetCompletionFrame(obj)
+
+
+
+
+

adx.data.models.QueryV2ResponseUnparsedRows.getDataSetHeader

+
adx.data.models.QueryV2ResponseUnparsedRows/getDataSetHeader is a function.
+    dataSetHeader = getDataSetHeader(obj)
+
+
+
+
+
+

adx.data.models.QueueIngestionMessage

+

Superclass: adx.control.JSONMapper

+
QueueIngestionMessage The message that the Kusto Data Management service expects to read from the input Azure Queue is a JSON document in the following format
+
+
+
+

adx.data.models.QueueIngestionMessage.QueueIngestionMessage

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.Row

+

Superclass: adx.control.JSONMapper

+
Row Represents a row that is parsed by JSONMapper
+  Class not used pending updated JSONMapper capability to handle simple arrays
+
+
+
+

adx.data.models.Row.Row

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.RowUnparsed

+

Superclass: adx.control.JSONMapper

+
RowUnparsed Row data returned which is not to be parsed by JSONMapper
+  Value is held an an unparsed string
+
+
+
+

adx.data.models.RowUnparsed.RowUnparsed

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.RowsUnparsed

+

Superclass: adx.control.JSONMapper

+
RowsUnparsed Row data returned which is not to be parsed by JSONMapper
+  Value is held an an unparsed string
+
+
+
+

adx.data.models.RowsUnparsed.RowsUnparsed

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.StreamFormat

+
STREAMFORMAT Specifies the format of the data in the request body
+  The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats
+
+
+
Enumeration values:
+  CSV
+  TSV
+  SCsv
+  SOHsv
+  PSV
+  JSON
+  MultiJSON
+  Avro
+
+
+
+

adx.data.models.StreamFormat.StreamFormat

+
STREAMFORMAT Specifies the format of the data in the request body
+  The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats
+
+
+
+
+
+

adx.data.models.TableCompletion

+

Superclass: adx.control.JSONMapper

+
TableCompletion Field to indicate the end of a table
+
+
+
+

adx.data.models.TableCompletion.TableCompletion

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.TableFragment

+

Superclass: adx.control.JSONMapper

+
TableFragment A part of a returned table
+
+
+
+

adx.data.models.TableFragment.TableFragment

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.TableFragmentType

+

Superclass: adx.control.JSONEnum

+
TableFragmentType Describes what the client should do with this fragment
+  The value should be one of:
+     DataAppend
+     DataReplace
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2
+
+
+
Enumeration values:
+  DataAppend
+  DataReplace
+
+
+
+

adx.data.models.TableFragmentType.TableFragmentType

+
TableFragmentType Describes what the client should do with this fragment
+  The value should be one of:
+     DataAppend
+     DataReplace
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2
+
+
+
+
+
+

adx.data.models.TableHeader

+

Superclass: adx.control.JSONMapper

+
TableHeader Header fields with top-level table properties
+
+
+
+

adx.data.models.TableHeader.TableHeader

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

adx.data.models.TableKind

+

Superclass: adx.control.JSONEnum

+
TableKind Specifies the type of a Table response
+  The value should be one of:
+    PrimaryResult
+    QueryCompletionInformation
+    QueryTraceLog
+    QueryPerfLog
+    TableOfContents
+    QueryProperties
+    QueryPlan
+    Unknown
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2
+
+
+
Enumeration values:
+  PrimaryResult
+  QueryCompletionInformation
+  QueryTraceLog
+  QueryPerfLog
+  TableOfContents
+  QueryProperties
+  QueryPlan
+  Unknown
+
+
+
+

adx.data.models.TableKind.TableKind

+
TableKind Specifies the type of a Table response
+  The value should be one of:
+    PrimaryResult
+    QueryCompletionInformation
+    QueryTraceLog
+    QueryPerfLog
+    TableOfContents
+    QueryProperties
+    QueryPlan
+    Unknown
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2
+
+
+
+
+
+

adx.data.models.TableProgress

+

Superclass: adx.control.JSONMapper

+
TableProgress Indicates the percentage of a task task that is complete
+
+
+
+

adx.data.models.TableProgress.TableProgress

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

azure

+
+
+

azure.core

+
+
+

azure.core.credential

+
+
+

azure.core.credential.AccessToken

+

Superclass: azure.object

+
ACCESSTOKEN An immutable access token with a token string and an expiration time
+  Can be created based on a corresponding Java com.azure.core.credential.AccessToken
+  argument or a token string and an expiry datetime (including a timezone).
+
+
+
+

azure.core.credential.AccessToken.AccessToken

+
ACCESSTOKEN An immutable access token with a token string and an expiration time
+  Can be created based on a corresponding Java com.azure.core.credential.AccessToken
+  argument or a token string and an expiry datetime (including a timezone).
+
+
+
+
+

azure.core.credential.AccessToken.getToken

+
GETTOKEN Return token as a character vector.
+
+
+
+
+

azure.core.credential.AccessToken.isExpired

+
ISEXPIRED Returns a logical if the token has expired or not
+
+
+
+
+
+

azure.core.credential.AzureSasCredential

+

Superclass: azure.object

+
AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate
+ 
+  See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/
+
+
+
+

azure.core.credential.AzureSasCredential.AzureSasCredential

+
AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate
+ 
+  See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/
+
+
+
+
+

azure.core.credential.AzureSasCredential.AzureSasSignature

+
azure.core.credential.AzureSasCredential/AzureSasSignature is a function.
+    obj = AzureSasSignature(varargin)
+
+
+
+
+

azure.core.credential.AzureSasCredential.getSignature

+
GETSIGNATURE Retrieves the shared access signature associated to this credential
+  Returns a character vector.
+ 
+  Copyright 2021 The MathWorks, Inc.
+
+
+
+
+

azure.core.credential.AzureSasCredential.update

+
UPDATE Rotates the shared access signature associated to this credential
+  Returns an updated AzureSasCredential object.
+
+
+
+
+
+

azure.core.credential.TokenCredential

+

Superclass: azure.object

+
TOKENCREDENTIAL Credential that can provide an access token
+
+
+
+

azure.core.credential.TokenCredential.TokenCredential

+
TOKENCREDENTIAL Credential that can provide an access token
+
+
+
+
+

azure.core.credential.TokenCredential.getToken

+
GETTOKEN Asynchronously retrieves an AccessToken
+  An azure.core.credential.AccessToken is returned.
+  This call is invokes the getTokenSync method rather than
+  getToken intentionally.
+
+
+
+
+

azure.core.credential.TokenCredential.getTokenSync

+
GETTOKENSYNC Synchronously retrieves an AccessToken
+  An azure.core.credential.AccessToken is returned.
+
+
+
+
+
+

azure.core.credential.TokenRequestContext

+

Superclass: azure.object

+
TOKENREQUESTCONTEXT Contains details of a request to get a token
+  Can be created based on a corresponding com.azure.core.credential.TokenRequestContext
+  Java object argument or without an argument where further configuration is
+  required to add scopes.
+
+
+
+

azure.core.credential.TokenRequestContext.TokenRequestContext

+
TOKENREQUESTCONTEXT Contains details of a request to get a token
+  Can be created based on a corresponding com.azure.core.credential.TokenRequestContext
+  Java object argument or without an argument where further configuration is
+  required to add scopes.
+
+
+
+
+

azure.core.credential.TokenRequestContext.addScopes

+
ADDSCOPES Adds one or more scopes to the request scopes
+  Scopes should be provided as character vector or scalar string arguments.
+  The updated TokenRequestContext is returned.
+
+
+
+
+

azure.core.credential.TokenRequestContext.getClaims

+
GETCLAIMS Get the additional claims to be included in the token
+  Returns a character vector.
+
+
+
+
+

azure.core.credential.TokenRequestContext.getScopes

+
GETSCOPES Gets the scopes required for the token
+  Returns a string array.
+
+
+
+
+

azure.core.credential.TokenRequestContext.getTenantId

+
GETTENANTID Get the tenant id to be used for the authentication request
+  Returns a character vector.
+
+
+
+
+

azure.core.credential.TokenRequestContext.setClaims

+
SETCLAIMS Set the additional claims to be included in the token
+  The claims should be provided as a character vector or scalar string.
+  Returns an updated azure.core.credential.TokenRequestContext.
+
+
+
+
+

azure.core.credential.TokenRequestContext.setTenantId

+
SETTENANTID Set the tenant id to be used for the authentication request
+  The tenantId should be provided as a character vector or scalar string.
+  Returns an updated azure.core.credential.TokenRequestContext.
+
+
+
+
+
+

azure.core.util

+
+
+

azure.core.util.polling

+
+
+

azure.core.util.polling.LongRunningOperationStatus

+

Superclass: azure.object

+
LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation
+  The poll operation is considered complete when the status is one of:
+  SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED.
+ 
+  Possible values are:
+     FAILED
+     IN_PROGRESS
+     NOT_STARTED
+     SUCCESSFULLY_COMPLETED
+     USER_CANCELLED
+
+
+
+

azure.core.util.polling.LongRunningOperationStatus.LongRunningOperationStatus

+
LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation
+  The poll operation is considered complete when the status is one of:
+  SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED.
+ 
+  Possible values are:
+     FAILED
+     IN_PROGRESS
+     NOT_STARTED
+     SUCCESSFULLY_COMPLETED
+     USER_CANCELLED
+
+
+
+
+

azure.core.util.polling.LongRunningOperationStatus.fromString

+
FROMSTRING Creates a LongRunningOperationStatus from its string representation
+  A name argument of type character vector or scalar string is required.
+  A logical isComplete argument is required.
+  A azure.core.util.LongRunningOperationStatus is returned.
+
+
+
+
+

azure.core.util.polling.LongRunningOperationStatus.isComplete

+
ISCOMPLETE Returns a logical to represent if in a completed state or not
+
+
+
+
+

azure.core.util.polling.LongRunningOperationStatus.toString

+
TOSTRING Returns a string representation of LongRunningOperationStatus
+  Expected values are:
+     FAILED
+     IN_PROGRESS
+     NOT_STARTED
+     SUCCESSFULLY_COMPLETED
+     USER_CANCELLED
+ 
+  A character vector is returned.
+
+
+
+
+
+

azure.core.util.polling.PollResponse

+

Superclass: azure.object

+
POLLRESPONSE Represents a response from long-running polling operation
+  It provides information such as the current status of the long-running
+  operation and any value returned in the poll.
+ 
+  Can be created based on a corresponding com.azure.core.util.polling.PollResponse
+  Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus
+  or azure.core.util.polling.LongRunningOperationStatus status argument and a
+  message argument of type character vector or scalar string.
+
+
+
+

azure.core.util.polling.PollResponse.PollResponse

+
POLLRESPONSE Represents a response from long-running polling operation
+  It provides information such as the current status of the long-running
+  operation and any value returned in the poll.
+ 
+  Can be created based on a corresponding com.azure.core.util.polling.PollResponse
+  Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus
+  or azure.core.util.polling.LongRunningOperationStatus status argument and a
+  message argument of type character vector or scalar string.
+
+
+
+
+

azure.core.util.polling.PollResponse.getRetryAfter

+
GETRETRYAFTER Gets requested delay until next polling operation is performed
+  If a negative value is returned the poller should determine on its own when
+  the next poll operation is to occur.
+
+
+
+
+

azure.core.util.polling.PollResponse.getStatus

+
GETSTATUS Gets status of a long-running operation at last polling operation
+
+
+
+
+

azure.core.util.polling.PollResponse.getValue

+
GETVALUE The value returned as a result of the last successful poll operation
+  This can be any custom user defined object, or null if no value was returned
+  from the service. The return value will be subject to standard MATLAB to Java
+  data type conversion and the following conversions:
+     java.lang.String -> character vector
+
+
+
+
+
+

azure.core.util.polling.SyncPoller

+

Superclass: azure.object

+
SYNCPOLLER Simplifies executing long-running operations against Azure
+  There is no constructor as this is based on a Java interface. A SyncPoller
+  must be created based on the underlying SyncPoller Java object.
+
+
+
+

azure.core.util.polling.SyncPoller.SyncPoller

+
SYNCPOLLER Simplifies executing long-running operations against Azure
+  There is no constructor as this is based on a Java interface. A SyncPoller
+  must be created based on the underlying SyncPoller Java object.
+
+
+
+
+

azure.core.util.polling.SyncPoller.cancelOperation

+
CANCELOPERATION Cancels the remote long-running operation
+  Requires cancellation to be supported by the service.
+
+
+
+
+

azure.core.util.polling.SyncPoller.poll

+
POLL Poll once and return the poll response received
+  A azure.core.util.polling.PollResponse is returned.
+
+
+
+
+

azure.core.util.polling.SyncPoller.waitForCompletion

+
WAITFORCOMPLETION Wait for polling to complete with optional timeout
+  A azure.core.util.polling.PollResponse is returned.
+  An optional timeout can be provided as a scalar number of seconds to
+  wait for polling to complete. The value will be converted to an integer value
+  of seconds.
+
+
+
+
+
+

azure.identity

+
+
+

azure.identity.AuthenticationRecord

+

Superclass: azure.object

+
Represents the account information relating to an authentication request
+  Held as a Java reactor.core.publisher.MonoMap.
+
+
+
+

azure.identity.AuthenticationRecord.AuthenticationRecord

+
Represents the account information relating to an authentication request
+  Held as a Java reactor.core.publisher.MonoMap.
+
+
+
+
+

azure.identity.AuthenticationRecord.subscribe

+
SUBSCRIBE Subscribe to this Mono and request unbounded demand
+  Used to trigger the device code challenge flow.
+  Returns a Java reactor.core.publisher.LambdaMonoSubscriber object.
+  The return value is not normally required.
+
+
+
+
+
+

azure.identity.AzureCliCredential

+

Superclass: azure.core.credential.TokenCredential

+
AZURECLICREDENTIAL Provides token credentials based on Azure CLI command
+  If the CLI is installed and authenticated there is no need to further
+  authenticate within MATLAB.
+  A object is created based on a corresponding Java com.azure.identity.AzureCliCredential
+  object.
+
+
+
+

azure.identity.AzureCliCredential.AzureCliCredential

+
Created using a AzureCliCredential java object from the
+  AzureCliCredentialBuilder class only
+
+
+
+
+
+

azure.identity.AzureCliCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
AZURECLICREDENTIALBUILDER  Credential builder for instantiating a AzureCliCredential
+
+
+
+

azure.identity.AzureCliCredentialBuilder.AzureCliCredentialBuilder

+
AZURECLICREDENTIALBUILDER  Credential builder for instantiating a AzureCliCredential
+
+
+
+
+

azure.identity.AzureCliCredentialBuilder.build

+
BUILD Creates new AzureCliCredential with the configured options set
+
+
+
+
+
+

azure.identity.ChainedTokenCredential

+

Superclass: azure.core.credential.TokenCredential

+
CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers
+
+
+
+

azure.identity.ChainedTokenCredential.ChainedTokenCredential

+
CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers
+
+
+
+
+
+

azure.identity.ChainedTokenCredentialBuilder

+

Superclass: azure.object

+
CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential
+
+
+
+

azure.identity.ChainedTokenCredentialBuilder.ChainedTokenCredentialBuilder

+
CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential
+
+
+
+
+

azure.identity.ChainedTokenCredentialBuilder.addLast

+
ADDLAST Adds a credential to try to authenticate at the end of the chain
+
+
+
+
+

azure.identity.ChainedTokenCredentialBuilder.build

+
BUILD Creates new ChainedTokenCredential with the configured options set
+
+
+
+
+
+

azure.identity.ClientCertificateCredential

+

Superclass: azure.core.credential.TokenCredential

+
CLIENTCERTIFICATECREDENTIAL AAD credential acquires a token with a client certificate
+
+
+
+

azure.identity.ClientCertificateCredential.ClientCertificateCredential

+
Created using a ClientCertificateCredential java object from the
+  ClientCertificateCredentialBuilder class only
+
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.ClientCertificateCredentialBuilder

+
CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated ClientCertificateCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.build

+
BUILD Creates new ClientCertificateCredential with the configured options set
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated ClientCertificateCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.pemCertificate

+
PEMCERTIFICATE Sets the path of the PEM certificate for authenticating to AAD
+  An updated ClientCertificateCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientCertificateCredentialBuilder.tenantId

+
TENANTID Sets tenant id to authenticate through ClientCertificateCredential
+  An updated ClientCertificateCredentialBuilder is returned.
+
+
+
+
+
+

azure.identity.ClientSecretCredential

+

Superclass: azure.core.credential.TokenCredential

+
CLIENTSECRETCREDENTIAL AAD credential acquires a token with a client secret
+
+
+
+

azure.identity.ClientSecretCredential.ClientSecretCredential

+
Created using a ClientSecretCredential java object from the
+  ClientSecretCredentialBuilder class only
+
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.ClientSecretCredentialBuilder

+
CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated ClientSecretCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.build

+
BUILD Creates new ClientSecretCredential with the configured options set
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated ClientSecretCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.clientSecret

+
CLIENTID Sets the client secret for the authentication
+  An updated ClientSecretCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ClientSecretCredentialBuilder.tenantId

+
TENANTID Sets tenant id to authenticate through ClientSecretCredential
+  An updated ClientSecretCredentialBuilder is returned.
+
+
+
+
+
+

azure.identity.CredentialBuilderBase

+

Superclass: azure.object

+
azure.identity.CredentialBuilderBase is a class.
+    obj = azure.identity.CredentialBuilderBase
+
+
+
+

azure.identity.CredentialBuilderBase.CredentialBuilderBase

+
azure.identity.CredentialBuilderBase/CredentialBuilderBase is a constructor.
+    obj = azure.identity.CredentialBuilderBase
+
+
+
+
+

azure.identity.CredentialBuilderBase.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+
+

azure.identity.DefaultAzureCredential

+

Superclass: azure.core.credential.TokenCredential

+
DEFAULTAZURECREDENTIAL Creates credential from environment or the shared token
+  It tries to create a valid credential in the following order:
+   EnvironmentCredential
+   ManagedIdentityCredential
+   SharedTokenCacheCredential
+   IntelliJCredential
+   VisualStudioCodeCredential
+   AzureCliCredential
+   Fails if none of the credentials above could be created.
+
+
+
+

azure.identity.DefaultAzureCredential.DefaultAzureCredential

+
Created using a DefaultAzureCredential java object from the
+  DefaultAzureCredentialBuilder class only
+
+
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder.DefaultAzureCredentialBuilder

+
DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential
+
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated DefaultAzureCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder.build

+
BUILD Creates new DefaultAzureCredential with the configured options set
+
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId

+
MANAGEDIDENTITYCLIENTID Specifies client ID of user or system assigned identity
+  This credential can be used when in an environment with managed identities.
+  If unset, the value in the AZURE_CLIENT_ID environment variable will be used.
+  If neither is set, the default value is null and will only work with system
+  assigned managed identities and not user assigned managed identities.
+  An updated DefaultAzureCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DefaultAzureCredentialBuilder.tenantId

+
TENANTID Sets tenant id of user to authenticate through DefaultAzureCredential
+  An updated DefaultAzureCredentialBuilder is returned.
+
+
+
+
+
+

azure.identity.DeviceCodeCredential

+

Superclass: azure.core.credential.TokenCredential

+
DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application
+
+
+
+

azure.identity.DeviceCodeCredential.DeviceCodeCredential

+
DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application
+
+
+
+
+

azure.identity.DeviceCodeCredential.authenticate

+
AUTHENTICATE  Authenticates a user via the device code flow
+  Can take a azure.core.credential.TokenRequestContext as an optional argument.
+  Returns a reactor.core.publisher.Mono as a azure.identity.AuthenticationRecord.
+
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential.
+ 
+  The DeviceCodeCredentialBuilder constructor in MATLAB always applies
+  disableAutomaticAuthentication to avoid any automatic authentication
+  attempts by clients during which MATLAB will not be able to display the
+  device code. If a client requires authentication for a certain scope and
+  your DeviceCodeCredential has not been authenticated for this (yet), an
+  error will be thrown.
+  
+  See:
+    https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication()
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.DeviceCodeCredentialBuilder

+
DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential.
+ 
+  The DeviceCodeCredentialBuilder constructor in MATLAB always applies
+  disableAutomaticAuthentication to avoid any automatic authentication
+  attempts by clients during which MATLAB will not be able to display the
+  device code. If a client requires authentication for a certain scope and
+  your DeviceCodeCredential has not been authenticated for this (yet), an
+  error will be thrown.
+  
+  See:
+    https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication()
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated DeviceCodeCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.build

+
BUILD Not Supported in MATLAB
+ 
+  When working with DeviceCodeCredential, MATLAB requires the credential
+  object to be pre-authorized before passing it to an Azure client. Please
+  build and also immediately authorize the DeviceCodeCredential using the
+  'buildAndAuthenticate' method instead.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate

+
BUILDANDAUTHENTICATE Creates new DeviceCodeCredential with the configured
+  options set and also immediately authenticates it with the requested
+  tokenRequestContext.
+  
+  By default this method will print the device code information:
+ 
+   To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code ILOVEMATLAB to authenticate.
+ 
+  To the MATLAB Command Window. Optionally a function handle
+  challengeConsumer can be provided to customize the message or how to
+  display it. This function will be called with a DeviceCodeInfo object as
+  input.
+ 
+  An authenticated DeviceCodeCredential is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated DeviceCodeCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication

+
DISABLEAUTOMATICAUTHENTICATION Disables the automatic authentication and
+  prevents the DeviceCodeCredential from automatically prompting the user.
+  If automatic authentication is disabled a AuthenticationRequiredException
+  will be thrown from getToken(TokenRequestContext request) in the case
+  that user interaction is necessary.
+ 
+  An updated DeviceCodeCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.maxRetry

+
MAXRETRY Sets max number of retries when an authentication request fails
+  An updated DeviceCodeCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.tenantId

+
TENANTID Sets tenant id to authenticate through DeviceCodeCredential
+  An updated DeviceCodeCredentialBuilder is returned.
+
+
+
+
+

azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions

+
TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions.
+
+
+
+
+
+

azure.identity.DeviceCodeInfo

+

Superclass: azure.object

+
DEVICECODEINFO Contains details of a device code request.
+
+
+
+

azure.identity.DeviceCodeInfo.DeviceCodeInfo

+
DEVICECODEINFO Contains details of a device code request.
+
+
+
+
+

azure.identity.DeviceCodeInfo.getExpiresOn

+
GETEXPIRESON Gets the expiration time of device code.
+  Returns a datetime object.
+
+
+
+
+

azure.identity.DeviceCodeInfo.getMessage

+
GETMESSAGE Gets the message which should be displayed to the user.
+  Returns a character vector.
+
+
+
+
+

azure.identity.DeviceCodeInfo.getUserCode

+
GETUSERCODE Gets the code which user needs to provide when authenticating
+  at the verification URL. 
+  Returns a character vector.
+
+
+
+
+

azure.identity.DeviceCodeInfo.getVerificationUrl

+
GETVERIFICATIONURL Gets the URL where user can authenticate.
+  Returns a character vector.
+
+
+
+
+
+

azure.identity.EnvironmentCredential

+

Superclass: azure.core.credential.TokenCredential

+
ENVIRONMENTCREDENTIAL Provides token credentials based on environment variables
+   The environment variables expected are:
+     AZURE_CLIENT_ID
+     AZURE_CLIENT_SECRET
+     AZURE_TENANT_ID
+  or:
+     AZURE_CLIENT_ID
+     AZURE_CLIENT_CERTIFICATE_PATH
+     AZURE_TENANT_ID
+  or:
+     AZURE_CLIENT_ID
+     AZURE_USERNAME
+     AZURE_PASSWORD
+
+
+
+

azure.identity.EnvironmentCredential.EnvironmentCredential

+
Created using a EnvironmentCredential java object from the
+  EnvironmentCredential class only
+
+
+
+
+
+

azure.identity.EnvironmentCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder
+
+
+
+

azure.identity.EnvironmentCredentialBuilder.EnvironmentCredentialBuilder

+
ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder
+
+
+
+
+

azure.identity.EnvironmentCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated EnvironmentCredentialBuilder is returned.
+
+
+
+
+

azure.identity.EnvironmentCredentialBuilder.build

+
BUILD Creates new EnvironmentCredential with the configured options set
+
+
+
+
+
+

azure.identity.InteractiveBrowserCredential

+

Superclass: azure.core.credential.TokenCredential

+
INTERACTIVEBROWSERCREDENTIAL Prompt the login in the default browser
+  An AAD credential that acquires a token for an AAD application by prompting
+  the login in the default browser.
+  The oauth2 flow will notify the credential of the authentication code through
+  the reply URL.
+  The application to authenticate to must have delegated user login permissions 
+  and have http://localhost:{port} listed as a valid reply URL.
+
+
+
+

azure.identity.InteractiveBrowserCredential.InteractiveBrowserCredential

+
Created using a EnvironmentCredential java object from the
+  EnvironmentCredential class only
+
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.InteractiveBrowserCredentialBuilder

+
INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated InteractiveBrowserCredentialBuilder is returned.
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.build

+
BUILD Creates new InteractiveBrowserCredential with the configured options set
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated InteractiveBrowserCredentialBuilder is returned.
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl

+
REDIRECTURL Sets Redirect URL for application with the security code callback
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.tenantId

+
TENANTID Sets tenant id of user to authenticate through InteractiveBrowserCredential
+  An updated InteractiveBrowserCredentialBuilder is returned.
+
+
+
+
+

azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions

+
tokenCachePersistenceOptions Sets tokenCachePersistenceOptions.
+
+
+
+
+
+

azure.identity.ManagedIdentityCredential

+

Superclass: azure.core.credential.TokenCredential

+
MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials
+
+
+
+

azure.identity.ManagedIdentityCredential.ManagedIdentityCredential

+
MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials
+
+
+
+
+

azure.identity.ManagedIdentityCredential.getClientId

+
GETCLIENTID Gets the client ID of user assigned or system assigned identity
+  The client ID is returned as a character vector.
+
+
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder.ManagedIdentityCredentialBuilder

+
MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential
+
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder.build

+
BUILD Creates new ManagedIdentityCredential with the configured options set
+
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated ManagedIdentityCredentialBuilder is returned.
+
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder.maxRetry

+
MAXRETRY Sets max number of retries when an authentication request fails
+
+
+
+
+

azure.identity.ManagedIdentityCredentialBuilder.resourceId

+
RESOURCEID Sets client id
+  An updated ManagedIdentityCredentialBuilder is returned.
+
+
+
+
+
+

azure.identity.SharedTokenCacheCredential

+

Superclass: azure.core.credential.TokenCredential

+
DEVICECODECREDENTIAL A credential provider that provides token
+  credentials from the MSAL shared token cache.
+
+
+
+

azure.identity.SharedTokenCacheCredential.SharedTokenCacheCredential

+
DEVICECODECREDENTIAL A credential provider that provides token
+  credentials from the MSAL shared token cache.
+
+
+
+
+

azure.identity.SharedTokenCacheCredential.restFlow

+
azure.identity.SharedTokenCacheCredential.restFlow is an undocumented builtin static method or namespace function.
+
+
+
+
+

azure.identity.SharedTokenCacheCredential.restGetSas

+
azure.identity.SharedTokenCacheCredential.restGetSas is an undocumented builtin static method or namespace function.
+
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder

+

Superclass: azure.identity.CredentialBuilderBase

+
SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.SharedTokenCacheCredentialBuilder

+
SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.authorityHost

+
AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens
+  An updated SharedTokenCacheCredentialBuilder is returned.
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.build

+
BUILD Creates new SharedTokenCacheCredential with the configured options set
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.clientId

+
CLIENTID Sets client id
+  An updated SharedTokenCacheCredentialBuilder is returned.
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.tenantId

+
TENANTID Sets tenant id to authenticate through SharedTokenCacheCredential
+  An updated SharedTokenCacheCredentialBuilder is returned.
+
+
+
+
+

azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions

+
TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions.
+
+
+
+
+
+

azure.identity.TokenCachePersistenceOptions

+

Superclass: azure.object

+
TOKENREQUESTCONTEXT Contains details of a request to get a token
+  Can be created based on a corresponding com.azure.core.credential.TokenRequestContext
+  Java object argument or without an argument where further configuration is
+  required to add scopes.
+
+
+
+

azure.identity.TokenCachePersistenceOptions.TokenCachePersistenceOptions

+
TOKENREQUESTCONTEXT Contains details of a request to get a token
+  Can be created based on a corresponding com.azure.core.credential.TokenRequestContext
+  Java object argument or without an argument where further configuration is
+  required to add scopes.
+
+
+
+
+

azure.identity.TokenCachePersistenceOptions.getName

+
GETNAME Get the name.
+  Returns a character vector.
+
+
+
+
+

azure.identity.TokenCachePersistenceOptions.setName

+
SETNAME Set the name.
+  Returns an updated azure.core.identity.TokenCachePersistenceOptions.
+
+
+
+
+
+

azure.mathworks

+
+
+

azure.mathworks.internal

+
+
+

azure.mathworks.internal.compareAuthEnvVars

+
COMPAREAUTHENVVARS Checks matching Java & MATLAB authentication env. variables
+  This is a useful sanity check that variables exist in both contexts.
+  The following variables are tested:
+    AZURE_CLIENT_ID
+    AZURE_CLIENT_SECRET
+    AZURE_TENANT_ID
+    AZURE_CLIENT_CERTIFICATE_PATH
+    AZURE_USERNAME
+    AZURE_PASSWORD
+ 
+  A variable no set in either context does not return a false.
+  A logical is returned.
+
+
+
+
+

azure.mathworks.internal.datetime2OffsetDateTime

+
DATETIME2OFFSETDATETIME Converts a MATLAB datetime to a Java
+  OffsetDateTime in UTC. Ideally the input MATLAB datetime has a specific
+  timezone set already. If no timezone is set, local is assumed.
+
+
+
+
+

azure.mathworks.internal.int64FnHandler

+
int64FnHandler Invokes Java method to convert a Java long to a string and then an int64
+  An int64 is returned.
+
+
+
+
+

azure.security

+
+
+

azure.security.keyvault

+
+
+

azure.security.keyvault.keys

+
+
+

azure.security.keyvault.keys.models

+
+
+

azure.security.keyvault.keys.models.DeletedKey

+

Superclass: azure.security.keyvault.keys.models.KeyVaultKey

+
DELETEDKEY Deleted Key is the resource consisting of name, recovery
+  id, deleted date, scheduled purge date and its attributes inherited
+  from KeyVaultKey. It is managed by Key Service.
+ 
+  DeletedKey follows the Azure KeyVault Java SDK design, meaning that
+  DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like
+  getKey and getName. It appears however that some of those methods do
+  not actually return a value for deleted keys and it even appears to
+  depend on how the DeletedKey was obtained. A DeletedKey obtained
+  through getDeletedKey *does* appear to return a name when calling
+  getName whereas DeletedKey obtained through listDeletedKeys does
+  *not*. These are all behaviors of the underlying Azure KeyVault Java
+  SDK and not MATLAB specific behaviors.
+ 
+  In that sense, to determine the name of a deleted key, it appears the
+  best option is to call getRecoveryId and parse the name from the URI
+  this returns.
+
+
+
+

azure.security.keyvault.keys.models.DeletedKey.DeletedKey

+
DELETEDKEY Deleted Key is the resource consisting of name, recovery
+  id, deleted date, scheduled purge date and its attributes inherited
+  from KeyVaultKey. It is managed by Key Service.
+ 
+  DeletedKey follows the Azure KeyVault Java SDK design, meaning that
+  DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like
+  getKey and getName. It appears however that some of those methods do
+  not actually return a value for deleted keys and it even appears to
+  depend on how the DeletedKey was obtained. A DeletedKey obtained
+  through getDeletedKey *does* appear to return a name when calling
+  getName whereas DeletedKey obtained through listDeletedKeys does
+  *not*. These are all behaviors of the underlying Azure KeyVault Java
+  SDK and not MATLAB specific behaviors.
+ 
+  In that sense, to determine the name of a deleted key, it appears the
+  best option is to call getRecoveryId and parse the name from the URI
+  this returns.
+
+
+
+
+

azure.security.keyvault.keys.models.DeletedKey.getDeletedOn

+
GETDELETEDON Get the deleted UTC time. 
+  A datetime object is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.DeletedKey.getRecoveryId

+
GETRECOVERYID Get the recoveryId identifier.
+  The URI is returned as character array.
+
+
+
+
+

azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate

+
GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time.
+  A datetime object is returned.
+
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey

+

Superclass: azure.object

+
JSONWEBKEY Key as per http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18
+  This can be used an intermediate format for converting to other key types or
+  for extracting elements of a key.
+ 
+  Example:
+      key = keyClient.getKey('myKeyName');
+      % Return as a jsonWebKey and test if valid
+      jsonWebKey = key.getKey();
+      tf = jsonWebKey.isValid);
+      % Convert to an RSA key
+      keyRsa = jsonWebKey.toRsa(false);
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.JsonWebKey

+
Create a logger object
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.clearMemory

+
CLEARMEMORY Clears key materials in the underlying Java SDK
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.getId

+
GETID Get the kid value
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.getKeyType

+
GETKEYTYPE Get the kty value
+  A azure.security.keyvault.keys.models.KeyType is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey

+
HASPRIVATEKEY Verifies whether the JsonWebKey has a private key or not
+  A logical is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.isValid

+
ISVALID Verifies whether the JsonWebKey is valid
+  A logical is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.toAes

+
TOAES Converts JSON web key to AES key
+  A key of type javax.crypto.SecretKey is returned.
+ 
+  Example:
+      key = keyClient.getKey('myKeyName');
+      jsonWebKey = key.getKey();
+      keyAes = jsonWebKey.toAes();
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.toEc

+
TOEC Converts JSON web key to EC key pair & optionally include the private key
+  Include private key if includePrivateParameters set to true
+  A key pair of type java.security.KeyPair is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.toRsa

+
TORSA Converts JSON web key to RSA key pair
+  Include private key if includePrivateParameters set to true
+  A key pair of type java.security.KeyPair is returned.
+ 
+  Example:
+      key = keyClient.getKey('myKeyName');
+      % Return as a jsonWebKey
+      jsonWebKey = key.getKey();
+      % Convert to an RSA key
+      keyRsa = jsonWebKey.toRsa(false);
+
+
+
+
+

azure.security.keyvault.keys.models.JsonWebKey.toString

+
TOSTRING Return as a character vector
+
+
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties

+

Superclass: azure.object

+
KEYPROPERTIES Contains the properties of the secret except its value
+ 
+  Example
+      keyClient = createKeyVaultClient('Type','Key');
+      propList = keyClient.listPropertiesOfKeys();
+      % Look at a name in a returned property
+      name = propList(1).getName();
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties.KeyProperties

+
KEYPROPERTIES Contains the properties of the secret except its value
+ 
+  Example
+      keyClient = createKeyVaultClient('Type','Key');
+      propList = keyClient.listPropertiesOfKeys();
+      % Look at a name in a returned property
+      name = propList(1).getName();
+
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties.getId

+
GETID Get the secret identifier
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties.getKeyId

+
GETKEYID Get the keyId identifier
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties.getName

+
GETNAME Get the key name
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyProperties.getVersion

+
GETVERSION Get the key version
+  A character vector is returned.
+
+
+
+
+
+

azure.security.keyvault.keys.models.KeyType

+
KEYTYPE Defines enumeration values for KeyType
+  Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM
+
+
+
Enumeration values:
+  EC
+  EC_HSM
+  OCT
+  OCT_HSM
+  RSA
+  RSA_HSM
+
+
+
+

azure.security.keyvault.keys.models.KeyType.KeyType

+
KEYTYPE Defines enumeration values for KeyType
+  Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM
+
+
+
+
+

azure.security.keyvault.keys.models.KeyType.fromString

+
FROMSTRING Creates or finds a KeyType from its string representation
+  A azure.security.keyvault.keys.models.KeyType is returned.
+  Input may be a character vector or scalar string.
+  Input is not case sensitive.
+  Accepted values are: EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM.
+  This is a static method.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyType.toJava

+
TOJAVA Converts to a com.azure.security.keyvault.keys.models.KeyType Java object
+
+
+
+
+

azure.security.keyvault.keys.models.KeyType.toString

+
TOSTRING Returns text form of a azure.security.keyvault.keys.models.KeyType
+  A character vector is returned.
+
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey

+

Superclass: azure.object

+
KEYVAULTSECRET KeyVaultKey class
+  Creates a azure.security.keyvault.keys.models.KeyVaultKey object.
+  A com.azure.security.keyvault.keys.models.KeyVaultKey java object is a required
+  input argument. A number of methods return KeyVaultKey objects.
+ 
+  Example
+      % Get a KeyVaultKey object
+      key = keyClient.getKey('myKeyName');
+      keyType = key.getKeyType();
+      jsonWebKey = key.getKey();
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.KeyVaultKey

+
Create a logger object
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.getId

+
GETID Returns the ID value of the key
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.getKey

+
GETKEY Get the public part of the latest version of the key
+  A azure.security.keyvault.keys.models.JsonWebKey is returned
+ 
+  Example:
+      jsonWebKey = key.getKey();
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.getKeyType

+
GETKEYTYPE Returns the type of a key
+  Returns a azure.security.keyvault.keys.models.KeyType
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.getName

+
GETNAME Returns the key name
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.keys.models.KeyVaultKey.getProperties

+
GETPROPERTIES Get the key properties
+  A azure.security.keyvault.keys.models.KeyProperties is returned.
+
+
+
+
+
+

azure.security.keyvault.keys.KeyClient

+

Superclass: azure.object

+
KEYCLIENT A KeyClient object for transacting keys with the Key Vault
+ 
+  Example:
+      % Create a client using the createKeyVaultClient() function
+      % Here an optional non default configuration file path is provided that holds
+      % Client Secret style credentials
+      keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json')
+ 
+   Or
+ 
+      % If a configuration file path is not provided *createKeyVaultClient()* will search
+      % MATLAB path for a configuration file named ```keyvaultsettings.json```:
+      keyClient = createKeyVaultClient('Type','Key');
+ 
+   Or
+ 
+      % Alternatively a client can also be created manually to 
+      % Configure the logger level and message prefix if not already configured
+      initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault');
+ 
+      % Configure a credentials object based on a JSON config file
+      credentials = configureCredentials(which('keyvaultsettings.json'));
+ 
+      % Create a client builder object, a KeyClient in this case
+      builder = azure.security.keyvault.keys.KeyClientBuilder();
+ 
+      % Configure the builder using its methods
+      builder = builder.credential(credentials);
+      builder = builder.httpClient();
+      settings = loadConfigurationSettings(which('keyvaultsettings.json'));
+      builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+ 
+      % Create the client
+      keyClient = builder.buildClient();
+
+
+
+

azure.security.keyvault.keys.KeyClient.KeyClient

+
KEYCLIENT A KeyClient object for transacting keys with the Key Vault
+ 
+  Example:
+      % Create a client using the createKeyVaultClient() function
+      % Here an optional non default configuration file path is provided that holds
+      % Client Secret style credentials
+      keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json')
+ 
+   Or
+ 
+      % If a configuration file path is not provided *createKeyVaultClient()* will search
+      % MATLAB path for a configuration file named ```keyvaultsettings.json```:
+      keyClient = createKeyVaultClient('Type','Key');
+ 
+   Or
+ 
+      % Alternatively a client can also be created manually to 
+      % Configure the logger level and message prefix if not already configured
+      initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault');
+ 
+      % Configure a credentials object based on a JSON config file
+      credentials = configureCredentials(which('keyvaultsettings.json'));
+ 
+      % Create a client builder object, a KeyClient in this case
+      builder = azure.security.keyvault.keys.KeyClientBuilder();
+ 
+      % Configure the builder using its methods
+      builder = builder.credential(credentials);
+      builder = builder.httpClient();
+      settings = loadConfigurationSettings(which('keyvaultsettings.json'));
+      builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+ 
+      % Create the client
+      keyClient = builder.buildClient();
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.beginDeleteKey

+
BEGINDELETESECRET Deletes a key by name from Key Vault
+  A azure.core.util.polling.syncPoller is returned.
+  For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller
+  keyName can be provided as a scalar character vector or string.
+ 
+  Example:
+      key = keyClient.getKey('myKeyName');
+      syncPoller = keyClient.beginDeleteKey('myKeyName');
+      % Block until completion, allow a 10 second timeout
+      syncPoller.waitForCompletion(10);
+      % Other syncPoller methods are available, e.g. cancelOperation()
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey

+
BEGINRECOVERDELETEDKEY Recovers the deleted key in the key vault to its
+  latest version and can only be performed on a soft-delete enabled vault.
+  A azure.core.util.polling.syncPoller is returned.
+  For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller
+  keyName can be provided as a scalar character vector or string.
+ 
+  Example:
+      syncPoller = keyClient.beginRecoverDeletedKey('myKeyName');
+      % Block until completion, allow a 10 second timeout
+      syncPoller.waitForCompletion(10);
+      % Other syncPoller methods are available, e.g. cancelOperation()
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.createKey

+
CREATEKEY Creates a new key and stores it in the key vault
+  A key name argument is provided as a character vector or scalar string.
+  A azure.security.keyvault.keys.models.KeyType is provided as an argument
+  to indicate which type of key to create.
+  An azure.security.keyvault.keys.models.KeyVaultKey is returned.
+ 
+  Example:
+      % Create a client
+      keyClient = createKeyVaultClient('Type','Key');
+      % Create a key type, in this case RSA
+      rsaKeyType = azure.security.keyvault.keys.models.KeyType.RSA;
+      % Create the key
+      key = KeyClient.createKey('myKeyName', rsaKeyType);
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.getDeletedKey

+
GETDELETEDKEY Gets the public part of a deleted key.
+  The name argument is provided as a character vector or scalar string.
+  A azure.security.keyvault.keys.models.DeletedKey is returned.
+ 
+  Example:
+      key = keyClient.getDeletedKey('myKeyName');
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.getKey

+
GETKEY Get the public part of the latest version of the specified key
+  The name argument is provided as a character vector or scalar string.
+  A azure.security.keyvault.keys.models.KeyVaultKey is returned.
+ 
+  Example:
+      key = keyClient.getKey('myKeyName');
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.getVaultUrl

+
GETVAULTURL Gets the vault endpoint url to which service requests are sent to
+  A character vector is returned.
+  A URL has the form: https://<myKeyVaultName>.vault.azure.net/
+  The vaultUrl can optionally be stored in the package's JSON configuration file.
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.listDeletedKeys

+
LISTDELETEDKEYS Lists deleted keys of the key vault.
+  Properties are returned as an array of 
+  azure.security.keyvault.keys.models.DeletedKey objects.
+  If there are no keys an empty array is returned.
+ 
+  Example
+      % Get a list the key properties
+      deletedKeys = keyClient.listDeletedKeys();
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys

+
LISTPROPERTIESOFKEYS Lists keys in the key vault
+  Properties are returned as an array of 
+  azure.security.keyvault.keys.models.KeyProperties objects.
+  If there are no keys an empty array is returned.
+ 
+  Example
+      % Get a list the key properties
+      keyProperties = keyClient.listPropertiesOfKeys();
+      % Look at some of the data returned i.e. the key name
+      propList(1).getName();
+
+
+
+
+

azure.security.keyvault.keys.KeyClient.purgeDeletedKey

+
PURGEDELETEDKEY Permanently deletes the specified key without the
+  possibility of recovery. The Purge Deleted Key operation is applicable
+  for soft-delete enabled vaults. This operation requires the keys/purge
+  permission.
+  The name argument is provided as a character vector or scalar string.
+  The function throws an error if no deleted key can be found. Returns
+  nothing upon success.
+ 
+  Example:
+      keyClient.purgeDeletedKey('myKeyName');
+
+
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder

+

Superclass: azure.object

+
KEYCLIENTBUILDER Builder for KeyClient object
+  Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder
+  object as an argument to create a MATLAB builder from the Java builder.
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder.KeyClientBuilder

+
KEYCLIENTBUILDER Builder for KeyClient object
+  Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder
+  object as an argument to create a MATLAB builder from the Java builder.
+
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder.buildClient

+
BUILDCLIENT Creates a KeyClient based on options configured in the builder
+
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder.credential

+
CREDENTIAL Sets the credentials used to authorize a client's requests
+  An updated builder object is returned.
+ 
+  Example:
+      configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json');
+      credentials = configureCredentials(configFilePath);
+      builder = builder.credential(credentials);
+
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default. Other options may be added
+  in the future. An updated builder object is returned.
+  This method will apply http proxy settings if defined in MATLAB Web preferences.
+
+
+
+
+

azure.security.keyvault.keys.KeyClientBuilder.vaultUrl

+
VAULTURL Sets the vault URL to send HTTP requests to
+  vaultUrl should be of type character vector or scalar string.
+  An updated builder object is returned.
+  A URL has the form: https://<myKeyVaultName>.vault.azure.net/
+  The vaultUrl can optionally be stored in the package's JSON configuration file.
+
+
+
+
+
+

azure.security.keyvault.secrets

+
+
+

azure.security.keyvault.secrets.models

+
+
+

azure.security.keyvault.secrets.models.DeletedSecret

+

Superclass: azure.security.keyvault.secrets.models.KeyVaultSecret

+
DELETEDSECRET Deleted Secret is the resource consisting of name,
+  recovery id, deleted date, scheduled purge date and its attributes
+  inherited from KeyVaultSecret. It is managed by Secret Service.
+ 
+  DeletedSecret follows the Azure KeyVault Java SDK design, meaning
+  that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret
+  methods like getValue. It appears however that this method does not
+  actually return a value for deleted secrets. These are all behaviors
+  of the underlying Azure KeyVault Java SDK and not MATLAB specific
+  behaviors.
+
+
+
+

azure.security.keyvault.secrets.models.DeletedSecret.DeletedSecret

+
DELETEDSECRET Deleted Secret is the resource consisting of name,
+  recovery id, deleted date, scheduled purge date and its attributes
+  inherited from KeyVaultSecret. It is managed by Secret Service.
+ 
+  DeletedSecret follows the Azure KeyVault Java SDK design, meaning
+  that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret
+  methods like getValue. It appears however that this method does not
+  actually return a value for deleted secrets. These are all behaviors
+  of the underlying Azure KeyVault Java SDK and not MATLAB specific
+  behaviors.
+
+
+
+
+

azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn

+
GETDELETEDON Get the deleted UTC time.
+  A datetime object is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId

+
GETRECOVERYID Get the recoveryId identifier.
+  The URI is returned as character array.
+
+
+
+
+

azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate

+
GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time.
+  A datetime object is returned.
+
+
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret

+

Superclass: azure.object

+
KEYVAULTSECRET Class to provide access to the KeyVaultSecret object
+  Creates a azure.security.keyvault.secrets.models.KeyVaultSecret object.
+  A KeyVaultSecret can be created from a name and value or an equivalent Java
+  object. A number of methods return KeyVaultSecret objects.
+ 
+ 
+  Example
+      % Get a KeyVaultSecret object
+      secret = secretClient.getSecret('mySecretName');
+      value = secret.getValue();
+ 
+  Or
+ 
+      secret = azure.security.keyvault.secrets.models.KeyVaultSecret(secretName, secretValue);
+ 
+  Or
+ 
+      secret = azure.security.keyvault.secrets.models.KeyVaultSecret(javaKeyVaultSecret);
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret.KeyVaultSecret

+
Create a logger object
+
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret.getId

+
GETID Returns the ID value of the secret
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret.getName

+
GETNAME Returns the name of the secret
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties

+
GETPROPERTIES Get the secret properties
+  A azure.security.keyvault.secrets.models.SecretProperties is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.KeyVaultSecret.getValue

+
GETVALUE Returns the secret value
+  A character vector is returned.
+ 
+  Example:
+      sc = createKeyVaultClient('Type','Secret');
+      secret = sc.getSecret('mySecretName');
+      secretValue = secret.getValue();
+
+
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties

+

Superclass: azure.object

+
SECRETPROPERTIES Contains the properties of the secret but not its value
+ 
+  Example:
+      secretClient = createKeyVaultClient('Type','Secret');
+      propList = secretClient.listPropertiesOfSecrets();
+      % Look at a name in a returned property
+      name = propList(1).getName();
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties.SecretProperties

+
SECRETPROPERTIES Contains the properties of the secret but not its value
+ 
+  Example:
+      secretClient = createKeyVaultClient('Type','Secret');
+      propList = secretClient.listPropertiesOfSecrets();
+      % Look at a name in a returned property
+      name = propList(1).getName();
+
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties.getId

+
GETID Get the secret identifier
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties.getKeyId

+
GETKEYID Get the keyId identifier
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties.getName

+
GETNAME Get the secret name
+  A character vector is returned.
+
+
+
+
+

azure.security.keyvault.secrets.models.SecretProperties.getVersion

+
GETVERSION Get the keyId identifier
+  A character vector is returned.
+
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient

+

Superclass: azure.object

+
SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault
+ 
+  Example
+      % Create a Secret client using the higher-level createKeyVaultClient() function
+      % Here an optional non default configuration file path is provided that holds
+      % Client Secret style credentials:
+      secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json')
+ 
+   Or
+ 
+      % If a configuration file path is not provided *createKeyVaultClient()* will search
+      % MATLAB path for a configuration file named ```keyvaultsettings.json```:
+      secretClient = createKeyVaultClient('Type','Secret');
+ 
+   Or
+ 
+      % Alternatively a client can also be created manually using the builder for
+      % this class:
+      % Create a client builder object, a SecretClient in this case
+      builder = azure.security.keyvault.secrets.SecretClientBuilder();
+ 
+      % Configure a credentials object based on a JSON config file
+      credentials = configureCredentials(which('keyvaultsettings.json'));
+ 
+      % Configure the builder using its methods
+      builder = builder.credential(credentials);
+      builder = builder.httpClient();
+      settings = loadConfigurationSettings(which('keyvaultsettings.json'));
+      builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+ 
+      % Create the client
+      secretClient = builder.buildClient();
+
+
+
+

azure.security.keyvault.secrets.SecretClient.SecretClient

+
SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault
+ 
+  Example
+      % Create a Secret client using the higher-level createKeyVaultClient() function
+      % Here an optional non default configuration file path is provided that holds
+      % Client Secret style credentials:
+      secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json')
+ 
+   Or
+ 
+      % If a configuration file path is not provided *createKeyVaultClient()* will search
+      % MATLAB path for a configuration file named ```keyvaultsettings.json```:
+      secretClient = createKeyVaultClient('Type','Secret');
+ 
+   Or
+ 
+      % Alternatively a client can also be created manually using the builder for
+      % this class:
+      % Create a client builder object, a SecretClient in this case
+      builder = azure.security.keyvault.secrets.SecretClientBuilder();
+ 
+      % Configure a credentials object based on a JSON config file
+      credentials = configureCredentials(which('keyvaultsettings.json'));
+ 
+      % Configure the builder using its methods
+      builder = builder.credential(credentials);
+      builder = builder.httpClient();
+      settings = loadConfigurationSettings(which('keyvaultsettings.json'));
+      builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+ 
+      % Create the client
+      secretClient = builder.buildClient();
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.beginDeleteSecret

+
BEGINDELETESECRET Deletes a secret by name from Key Vault
+  A azure.core.util.polling.syncPoller is returned.
+  keyName can be provided as a scalar character vector or string.
+ 
+  Example:
+      secret = secretClient.getSecret('mySecretName');
+      syncPoller = secretClient.beginDeleteSecret('mySecretName');
+      % Block until completion, allow a 10 second timeout
+      syncPoller.waitForCompletion(10);
+      % Other syncPoller methods are available
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret

+
BEGINRECOVERDELETEDSECRET Recovers the deleted secret in the key vault to
+  its latest version. Can only be performed on a soft-delete enabled vault.
+  This operation requires the secrets/recover permission.
+  A azure.core.util.polling.syncPoller is returned.
+  secretName can be provided as a scalar character vector or string.
+ 
+  Example:
+      syncPoller = secretClient.beginRecoverDeletedSecret('myDeletedSecretName');
+      % Block until completion, allow a 10 second timeout
+      syncPoller.waitForCompletion(10);
+      % Other syncPoller methods are available
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.getDeletedSecret

+
GETDELETEDSECRET Gets a secret that has been deleted for a soft-delete enabled key vault.
+  The name can be provided as a scalar character vector or string.
+  An exception is thrown is a secret does not exist otherwise a
+  azure.security.keyvault.secrets.models.DeletedSecret is returned.
+ 
+  Example
+      deletedSecret = secretClient.getDeletedSecret('mySecretName');
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.getSecret

+
GETSECRETS Returns the secret value of the specific secret by name
+  The name can be provided as a scalar character vector or string.
+  An exception is thrown is a secret does not exist otherwise a
+  azure.security.keyvault.secrets.models.KeyVaultSecret is returned.
+ 
+  Example
+      secret = secretClient.getsecret('mySecretName');
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.getVaultUrl

+
GETVAULTURL Gets the vault endpoint url to which service requests are sent to
+  A character vector is returned.
+  A URL has the form: https://<myKeyVaultName>.vault.azure.net/
+  The vaultUrl can optionally be stored in the package's JSON configuration file.
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.listDeletedSecrets

+
LISTDELETEDSECRETS Lists deleted secrets of the key vault if it has
+  enabled soft-delete. This operation requires the secrets/list permission.
+  Properties are returned as an array of 
+  azure.security.keyvault.secrets.models.DeletedSecret objects.
+  If there are no secrets an empty array is returned.
+ 
+  Example:
+      % Get a list of the deleted secrets
+      deletedSecrets = secretClient.listDeletedSecrets();
+      % Look at some of the data returned i.e. the secret name
+      deletedSecrets(1).getName();
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets

+
LISTPROPERTIESOFSECRETS Lists secrets in the key vault
+  Properties are returned as an array of 
+  azure.security.keyvault.secrets.models.SecretProperties objects.
+  If there are no secrets an empty array is returned.
+ 
+  Example:
+      % Get a list the secret properties
+      secretProperties = secretClient.listPropertiesOfSecrets();
+      % Look at some of the data returned i.e. the secret name
+      propList(1).getName();
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret

+
PURGEDELETEDSECRET Permanently removes a deleted secret, without the
+  possibility of recovery. This operation can only be performed on a
+  soft-delete enabled vault. This operation requires the secrets/purge
+  permission.
+ 
+  Throws an error on failure, does not return anything at all upon success.
+ 
+  Example
+      secretClient.purgeDeletedSecret('mySecretName');
+
+
+
+
+

azure.security.keyvault.secrets.SecretClient.setSecret

+
SETSECRETS Creates a secrets using a name and value
+  This method returns an azure.security.keyvault.secrets.KeyVaultSecret
+  object. secretName and secretValue can be provided as character vectors or
+  scalar strings.
+ 
+  Example:
+      % Create a SecretClient object
+      sc = createKeyVaultClient('Type','Secret');
+      % Set the secret name and its value to Azure KeyVault
+      keyVaultSecret = sc.setSecret(secretName, secretValue);
+
+
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder

+

Superclass: azure.object

+
SECRETCLIENTBUILDER builder for SecretClient
+  Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder
+  object as an argument to build a MATLAB builder from the Java builder.
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder.SecretClientBuilder

+
SECRETCLIENTBUILDER builder for SecretClient
+  Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder
+  object as an argument to build a MATLAB builder from the Java builder.
+
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder.buildClient

+
BUILDCLIENT Creates a SecretClient based on options configured in the builder
+
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder.credential

+
CREDENTIAL Sets the credentials used to authorize a client's requests
+  An updated builder object is returned.
+ 
+  Example:
+      configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json');
+      credentials = configureCredentials(configFilePath);
+      builder = builder.credential(credentials);
+
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default. Other options may be added
+  in the future. An updated builder object is returned.
+  This method will apply http proxy settings if defined in MATLAB Web preferences.
+
+
+
+
+

azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl

+
VAULTURL Sets the vault URL to send HTTP requests to
+  The vaultUrl should be of type character vector or scalar string.
+  An updated builder object is returned.
+  A URL has the form: https://<myKeyVaultName>.vault.azure.net/
+  The vaultUrl can optionally be stored in the package's JSON configuration file.
+
+
+
+
+
+

azure.storage

+
+
+

azure.storage.blob

+
+
+

azure.storage.blob.models

+
+
+

azure.storage.blob.models.BlobContainerItem

+

Superclass: azure.object

+
BLOBCONTAINERITEM An Azure Storage container
+
+
+
+

azure.storage.blob.models.BlobContainerItem.BlobContainerItem

+
BLOBCONTAINERITEM An Azure Storage container
+
+
+
+
+

azure.storage.blob.models.BlobContainerItem.getName

+
GETNAME Returns the container's name as a character vector
+
+
+
+
+
+

azure.storage.blob.models.BlobItem

+

Superclass: azure.object

+
BlobItem
+
+
+
+

azure.storage.blob.models.BlobItem.BlobItem

+
BlobItem
+
+
+
+
+

azure.storage.blob.models.BlobItem.getMetadata

+
GETMETADATA Get the metadata property
+
+
+
+
+

azure.storage.blob.models.BlobItem.getName

+
GETNAME Returns the blob's name as a character vector
+
+
+
+
+

azure.storage.blob.models.BlobItem.getProperties

+
GETPROPERTIES Get the properties property
+
+
+
+
+

azure.storage.blob.models.BlobItem.getSnapshot

+
GETSNAPSHOT Returns the blob's snapshot property as a character vector
+
+
+
+
+

azure.storage.blob.models.BlobItem.getTags

+
GETTAGS Get the tags property
+
+
+
+
+

azure.storage.blob.models.BlobItem.getVersionId

+
GETVERSIONID Returns the blob's versionId property as a character vector
+
+
+
+
+

azure.storage.blob.models.BlobItem.isDeleted

+
isDeleted Get the deleted property, returns a logical
+
+
+
+
+

azure.storage.blob.models.BlobItem.isPrefix

+
ISPREFIX Get the isPrefix property: If blobs are named to mimic a directory hierarchy
+
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties

+

Superclass: azure.object

+
BlobItemProperties Properties of a blob
+
+
+
+

azure.storage.blob.models.BlobItemProperties.BlobItemProperties

+
BlobItemProperties Properties of a blob
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getCacheControl

+
GETCACHECONTROL Get the cacheControl property
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getContentEncoding

+
GETCONTENTENCODING Get the getContentEncoding property
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getContentLanguage

+
GETCONTENTLANGUAGE Get the getContentLanguage property
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getContentLength

+
GETCONTENTLENGTH Get the contentType property
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getContentMd5

+
GETCONTENTMD5 Get the getContentMd5 property
+  Return the base64 value shown in the Azure portal
+
+
+
+
+

azure.storage.blob.models.BlobItemProperties.getContentType

+
GETCONTENTTYPE Get the getContentType property
+
+
+
+
+
+

azure.storage.blob.models.BlobListDetails

+

Superclass: azure.object

+
BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs
+
+
+
+

azure.storage.blob.models.BlobListDetails.BlobListDetails

+
BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveCopy

+
GETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs

+
GETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions

+
GETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy

+
GETRETRIEVEIMMUTABILITYPOLICY Whether immutability policy for the blob should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold

+
GETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveMetadata

+
GETRETRIEVEMETADATA Whether blob metadata should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots

+
GETRETRIEVESNAPSHOTS Whether snapshots should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveTags

+
GETRETRIEVETAGS Whether blob tags should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs

+
GETRETRIEVEUNCOMMITTEDBLOBS Whether blob tags should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.getRetrieveVersions

+
GETRETRIEVEVERSIONS Whether versions should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveCopy

+
SETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs

+
SETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions

+
SETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy

+
SETRETRIEVEIMMUTABILITYPOLICY Whether blobs which have been deleted with versioning should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold

+
SETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveMetadata

+
SETRETRIEVEMETADATA Whether blob metadata should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots

+
setRetrieveSnapshots Whether snapshots should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveTags

+
setRetrieveTags Whether blob tags should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs

+
SETRETRIEVEUNCOMMITTEDBLOBS Whether blob metadata should be returned
+
+
+
+
+

azure.storage.blob.models.BlobListDetails.setRetrieveVersions

+
SETRETRIEVEUNCOMMITTEDBLOBS Whether versions should be returned
+
+
+
+
+
+

azure.storage.blob.models.BlobProperties

+

Superclass: azure.object

+
BlobProperties Properties of a blob
+
+
+
+

azure.storage.blob.models.BlobProperties.BlobProperties

+
BlobProperties Properties of a blob
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getBlobSize

+
GETBLOBSIZE Gets the size of the blob in bytes
+  An int64 is returned.
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getCacheControl

+
GETCACHECONTROL Get the the cache control of the blob
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getContentEncoding

+
GETCONTENTENCODING Get the content encoding of the blob
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getContentLanguage

+
GETCONTENTLANGUAGE Get the content language of the blob
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getContentMd5

+
GETCONTENTMD5 Get the MD5 of the blob's content
+  Return the base64 value shown in the Azure portal
+
+
+
+
+

azure.storage.blob.models.BlobProperties.getContentType

+
GETCONTENTTYPE Get the content type of the blob
+
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions

+

Superclass: azure.object

+
LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.ListBlobsOptions

+
LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.getDetails

+
GETDETAILS Returns a BlobListDetails object
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage

+
GETDETAILS Returns the maximum number of blobs to return, including all BlobPrefix elements
+  A double is returned.
+  An empty [] is returned if not set.
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.getPrefix

+
GETPREFIX Filters the results to return only blobs whose names begin with the specified prefix
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.setDetails

+
SETDETAILS Returns a ListBlobsOptions object
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage

+
SETDETAILS Returns a ListBlobsOptions object
+
+
+
+
+

azure.storage.blob.models.ListBlobsOptions.setPrefix

+
SETPREFIX Filters the results to return only blobs whose names begin with the specified prefix
+
+
+
+
+
+

azure.storage.blob.models.StorageAccountInfo

+

Superclass: azure.object

+
STORAGEACCOUNTINFO Holds information related to the storage account
+  Currently only constructing an object based on and existing java object of
+  type StorageAccountInfo is supported.
+
+
+
+

azure.storage.blob.models.StorageAccountInfo.StorageAccountInfo

+
STORAGEACCOUNTINFO Holds information related to the storage account
+  Currently only constructing an object based on and existing java object of
+  type StorageAccountInfo is supported.
+
+
+
+
+

azure.storage.blob.models.StorageAccountInfo.getAccountKind

+
GETACCOUNTKIND Describes the type of the storage account
+  Values: BLOB_STORAGE, BLOCK_BLOB_STORAGE, FILE_STORAGE, STORAGE, STORAGE_V2
+  A character vector is returned rather than an enumeration
+
+
+
+
+
+

azure.storage.blob.models.UserDelegationKey

+

Superclass: azure.object

+
USERDELEGATIONKEY A user delegation key.
+
+
+
+

azure.storage.blob.models.UserDelegationKey.UserDelegationKey

+
USERDELEGATIONKEY A user delegation key.
+
+
+
+
+

azure.storage.blob.models.UserDelegationKey.getSignedExpiry

+
GETSIGNEDEXPIRY Get the signedExpiry property: The date-time
+  the key expires.
+
+
+
+
+

azure.storage.blob.models.UserDelegationKey.getSignedStart

+
GETSIGNEDSTART Get the signedStart property: The date-time the
+ key is active.
+
+
+
+
+
+

azure.storage.blob.sas

+
+
+

azure.storage.blob.sas.BlobContainerSasPermission

+

Superclass: azure.object

+
BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a BlobSasSignatureValues
+  object
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.BlobContainerSasPermission

+
BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a BlobSasSignatureValues
+  object
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission

+
HASCREATEPERMISSION Returns the create permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission

+
HASDELETEPERMISSION Returns the delete permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission

+
HASLISTPERMISSION Returns the list permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission

+
HASWRITEPERMISSION Returns the write permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.parse

+
PARSE Creates a BlobContainerSasPermission from the specified permissions string
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+  Expected characters are r, a, c, w, or d.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission

+
SETCREATEPERMISSION Sets the create permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission

+
SETDELETEPERMISSION Sets the delete permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setListPermission

+
SETLISTPERMISSION Sets the list permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission

+
SETREADPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission

+
SETWRITEPERMISSION Sets the write permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobContainerSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobContainerSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission

+

Superclass: azure.object

+
BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a BlobSasSignatureValues
+  object
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.BlobSasPermission

+
BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a BlobSasSignatureValues
+  object
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.hasCreatePermission

+
HASCREATEPERMISSION Returns the create permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.hasDeletePermission

+
HASDELETEPERMISSION Returns the delete permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.hasWritePermission

+
HASWRITEPERMISSION Returns the write permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.parse

+
PARSE Creates a BlobSasPermission from the specified permissions string
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+  Expected characters are r, a, c, w, or d.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.setCreatePermission

+
SETCREATEPERMISSION Sets the create permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.setDeletePermission

+
SETDELETEPERMISSION Sets the delete permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.setReadPermission

+
SETREADPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.setWritePermission

+
SETWRITEPERMISSION Sets the write permission status
+  The permission argument should be of type logical.
+  A azure.storage.blob.sas.BlobSasPermission object is returned.
+
+
+
+
+

azure.storage.blob.sas.BlobSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.blob.sas.BlobServiceSasSignatureValues

+

Superclass: azure.object

+
BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime:  datetime ideally with defined TimeZone to avoid any 
+                 confusion, if TimeZone is not set, 'local' is assumed
+    permissions: azure.storage.blob.sas.BlobSasPermission or
+                 BlobContainerSasPermission
+
+
+
+

azure.storage.blob.sas.BlobServiceSasSignatureValues.BlobServiceSasSignatureValues

+
BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime:  datetime ideally with defined TimeZone to avoid any 
+                 confusion, if TimeZone is not set, 'local' is assumed
+    permissions: azure.storage.blob.sas.BlobSasPermission or
+                 BlobContainerSasPermission
+
+
+
+
+
+

azure.storage.blob.specialized

+
+
+

azure.storage.blob.specialized.BlobLeaseClient

+

Superclass: azure.object

+
BLOBLEASECLIENT This class provides a client that contains all the
+  leasing operations for BlobContainerClient and BlobClient. This client
+  acts as a supplement to those clients and only handles leasing
+  operations.
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.BlobLeaseClient

+
BLOBLEASECLIENT This class provides a client that contains all the
+  leasing operations for BlobContainerClient and BlobClient. This client
+  acts as a supplement to those clients and only handles leasing
+  operations.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.acquireLease

+
ACQUIRELEASE Acquires a lease for write and delete
+  operations. The lease duration must be between 15 to 60
+  seconds or -1 for an infinite duration.
+ 
+  Returns the lease ID.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.breakLease

+
BREAKLEASE Breaks the previously acquired lease, if it
+  exists.
+ 
+  Returns the remaining time in the broken lease in seconds.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.changeLease

+
CHANGELEASE Changes the lease ID.
+ 
+  Returns the new lease ID.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.getLeaseId

+
GETLEASEID Get the lease ID for this lease.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl

+
GETRESOURCEURL Gets the URL of the lease client.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.releaseLease

+
RELEASELEASE Releases the previously acquired lease.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClient.renewLease

+
RENEWLEASE Renews the previously acquired lease.
+ 
+  Returns the renewed lease ID.
+
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder

+

Superclass: azure.object

+
BLOBCLIENTBUILDER This class provides a fluent builder API to help aid
+  the configuration and instantiation of Storage Lease clients.
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder.BlobLeaseClientBuilder

+
BLOBCLIENTBUILDER This class provides a fluent builder API to help aid
+  the configuration and instantiation of Storage Lease clients.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient

+
BLOBCLIENT Configures the builder based on the passed
+  BlobClient. This will set the HttpPipeline and URL that are
+  used to interact with the service.
+ 
+  Returns the updated BlobLeaseClientBuilder object
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient

+
BUILDCLIENT Creates a BlobLeaseClient based on the
+  configurations set in the builder.
+ 
+  Returns a BlobLeaseClient based on the configurations in this
+  builder.
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient

+
CONTAINERCLIENT Configures the builder based on the passed
+  BlobContainerClient. This will set the HttpPipeline and URL
+  that are used to interact with the service.
+ 
+  Returns the updated BlobLeaseClientBuilder object
+
+
+
+
+

azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId

+
CONTAINERCLIENT Configures the builder based on the passed
+  BlobContainerClient. This will set the HttpPipeline and URL
+  that are used to interact with the service.
+ 
+  Returns the updated BlobLeaseClientBuilder object
+
+
+
+
+
+

azure.storage.blob.BlobClient

+

Superclass: azure.object

+
BLOBCLIENT Client performs generic blob operations
+
+
+
+

azure.storage.blob.BlobClient.BlobClient

+
BLOBCLIENT Client performs generic blob operations
+
+
+
+
+

azure.storage.blob.BlobClient.copyFromUrl

+
COPYFROMURL Copies the data at the source URL to a blob
+  The call waits for the copy to complete before returning a response.
+  A copyId is returned as a character vector it can apply for certain long
+  running operations.
+ 
+  If a lease is active on the blob, parameter 'leaseId' and the
+  actual lease id as value can be provided.
+
+
+
+
+

azure.storage.blob.BlobClient.delete

+
DELETE BlobClient destructor - in MATLAB delete is a reserved
+  method name for the class destructor. This method does not delete
+  Blobs on Azure. To delete the Azure Blob use the deleteBlob
+  method in MATLAB.
+
+
+
+
+

azure.storage.blob.BlobClient.deleteBlob

+
DELETEBLOB Deletes the blob - this is the equivalent of the "delete"
+  method in the Azure Java API but because "delete" is a reserved
+  method name in MATLAB, the method is named deleteBlob.
+ 
+  If a lease is active on the blob, parameter 'leaseId' and the
+  actual lease id as value can be provided.
+ 
+  Example:
+    client.deleteBlob('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797')
+
+
+
+
+

azure.storage.blob.BlobClient.downloadToFile

+
DOWNLOADTOFILE Downloads the entire blob into a file specified by filePath
+  To overwrite an existing file use a parameter 'overwrite' and a logical true.
+  By default a file is not overwritten.
+ 
+  Example:
+    blobClient.downloadToFile('/mydir/myfile.txt', 'overwrite', true);
+
+
+
+
+

azure.storage.blob.BlobClient.exists

+
EXISTS Gets if the blob this client represents exists in Azure
+  A logical is returned if the Container exists indicating if the blob
+  exists or not. Otherwise an exception is thrown, for example if the
+  container does not exist. Consider using a container client to check for
+  the existance of the container first.
+
+
+
+
+

azure.storage.blob.BlobClient.generateSas

+
GENERATESAS Generates a SAS for the blob
+  The client must be authenticated via StorageSharedKeyCredential
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.blob.BlobClient.generateUserDelegationSas

+
GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the
+  blob using the specified BlobServiceSasSignatureValues and
+  UserDelegationKey. The UserDelegationKey can be obtained through the
+  getUserDelegationKey method of a BlobServiceClient.
+ 
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.blob.BlobClient.getAccountName

+
GETACCOUNTNAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobClient.getBlobUrl

+
GETBLOBURL Gets the URL of the blob represented by this client
+  The URL is returned as a character vector.
+
+
+
+
+

azure.storage.blob.BlobClient.getContainerClient

+
GETCONTAINERCLIENT Gets a client pointing to the parent container.
+
+
+
+
+

azure.storage.blob.BlobClient.getProperties

+
GETPROPERTIES Returns the blob's metadata and properties
+
+
+
+
+

azure.storage.blob.BlobClient.uploadFromFile

+
UPLOADFROMFILE Creates a or updates a block blob To overwrite an
+  existing blob use a parameter 'overwrite' and a logical true. By
+  default a blob is not overwritten.
+ 
+  If a lease is active on the blob, parameter 'leaseId' and the
+  actual lease id as value can be provided.
+ 
+  Example:
+    blobClient.uploadFromFile('/mydir/myfile.txt',...
+        'overwrite', true,...
+        'leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797');
+
+
+
+
+
+

azure.storage.blob.BlobClientBuilder

+

Superclass: azure.object

+
BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients
+
+
+
+

azure.storage.blob.BlobClientBuilder.BlobClientBuilder

+
BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.blobName

+
BLOBNAME Sets the name of the blob
+  blobName should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.buildClient

+
BUILDCLIENT Creates a BlobClient based on options set in the builder
+  A built BlobClient object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.connectionString

+
CONNECTIONSTRING Sets the connection string to connect to the service
+  connectionString should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.containerName

+
CONTAINERNAME Sets the name of the container that contains the blob
+  containerName should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential
+  or azure.core.credential.TokenCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.endpoint

+
ENDPOINT Sets the client endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.sasToken

+
sasToken Sets the SAS token used to authorize requests
+  sasToken should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobClientBuilder.setAnonymousAccess

+
SETANONYMOUSACCESS Clears the credential used to authorize the request
+  An updated builder object is returned.
+
+
+
+
+
+

azure.storage.blob.BlobContainerClient

+

Superclass: azure.object

+
BLOBCONTAINERCLIENT Client to a container
+
+
+
+

azure.storage.blob.BlobContainerClient.BlobContainerClient

+
BLOBCONTAINERCLIENT Client to a container
+
+
+
+
+

azure.storage.blob.BlobContainerClient.create

+
CREATE Creates a new container within a storage account
+
+
+
+
+

azure.storage.blob.BlobContainerClient.delete

+
DELETE BlobContainerClient destructor - in MATLAB delete is a
+  reserved method name for the class destructor. This method
+  does not delete Blob Containers on Azure. To delete the Azure
+  Blob Container use the deleteContainer method in MATLAB.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.deleteContainer

+
DELETECONTAINER Deletes the container - this is the equivalent of the
+  "delete" method in the Azure Java API but because "delete" is a
+  reserved method name in MATLAB, the method is named DELETECONTAINER.
+ 
+  If a lease is active on the blob, parameter 'leaseId' and the
+  actual lease id as value can be provided.
+ 
+  Example:
+    client.deleteContainer('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797')
+
+
+
+
+

azure.storage.blob.BlobContainerClient.exists

+
EXISTS Tests if the container this client represents exists in Azure
+  A logical is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.generateUserDelegationSas

+
GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the
+  container using the specified BlobServiceSasSignatureValues and
+  UserDelegationKey. The UserDelegationKey can be obtained through the
+  getUserDelegationKey method of a BlobServiceClient.
+ 
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getAccountName

+
GETACCOUNTNAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getAccountUrl

+
GETACCOUNTURL Get associated account URL
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getBlobClient

+
GETBLOBCLIENT Initializes a new BlobClient object 
+  blobName should be a scalar string or character vector.
+  A BlobClient is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getBlobContainerName

+
GETCONTAINERNAME Get the container name
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getBlobContainerUrl

+
GETBLOBCONTAINERURL Get associated container URL
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.getServiceClient

+
GETSERVICECLIENT Get a client pointing to the account.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.listBlobs

+
LISTBLOBS Returns a list of blobs in this container
+  Folder structures are flattened.
+  An array of BlobItems is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClient.listBlobsByHierarchy

+
LISTBLOBSBYHIERARCHY Returns the blobs and directories (prefixes) under the given directory (prefix).
+  Directories will have BlobItem.isPrefix() set to true. 
+  Blob names are returned in lexicographic order.
+  An array of BlobItems is returned.
+
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder

+

Superclass: azure.object

+
BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.BlobContainerClientBuilder

+
BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.buildClient

+
BUILDCLIENT Creates a BlobContainerClient based on options set in the builder
+  A built BlobContainerClient object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.connectionString

+
CONNECTIONSTRING Sets the connection string to connect to the service
+  connectionString should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.containerName

+
CONTAINERNAME Sets the name of the container
+  containerName should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.endpoint

+
ENDPOINT Sets the blob container endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobContainerClientBuilder.sasToken

+
sasToken Sets the SAS token used to authorize requests
+  sasToken should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+
+

azure.storage.blob.BlobServiceClient

+

Superclass: azure.object

+
BLOBSERVICECLIENT
+
+
+
+

azure.storage.blob.BlobServiceClient.BlobServiceClient

+
BLOBSERVICECLIENT
+
+
+
+
+

azure.storage.blob.BlobServiceClient.createBlobContainer

+
CREATEBLOBCONTAINER Creates a new container within a storage account
+  If a container with the same name already exists, the operation fails.
+  The name of the container to create should be passed as a character vector or
+  scalar string.
+  If the container already exists an empty azure.storage.blob.BlobContainerClient
+  is returned otherwise a non empty azure.storage.blob.BlobContainerClient is
+  returned.
+  In verbose logging mode a message is logged.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.deleteBlobContainer

+
DELETEBLOBCONTAINER Deletes the specified container in the storage account
+  The name of the container to create should be passed as a character vector or
+  scalar string.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.generateAccountSas

+
GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account
+  The client must be authenticated via StorageSharedKeyCredential
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.getAccountInfo

+
GETACCOUNTINFO Returns the sku name and account kind for the account
+  A StorageAccountInfo object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.getAccountName

+
GETACCOUNTNAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.getAccountUrl

+
GETACCOUNTURL Get associated account URL
+  A character vector is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClient.getUserDelegationKey

+
GETUSERDELEGATIONKEY Gets a user delegation key for use with this
+  account's blob storage. 
+  
+  Note: This method call is only valid when using TokenCredential. I.e. not
+  when working with ConnectionString or StorageSharedKey authentication
+  approaches.
+ 
+  The function takes two datetime objects as input, the start and expiry
+  time of the key's validity.
+ 
+  Returns a UserDelegationKey object.
+ 
+  Example:
+ 
+    key = sc.getUserDelegationKey(datetime('now'),datetime('now')+hours(1))
+
+
+
+
+

azure.storage.blob.BlobServiceClient.listBlobContainers

+
LISTBLOBCONTAINERS
+
+
+
+
+

azure.storage.blob.BlobServiceClient.setAnonymousAccess

+
SETANONYMOUSACCESS Clears the credential used to authorize the request
+  An updated builder object is returned.
+
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder

+

Superclass: azure.object

+
BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.BlobServiceClientBuilder

+
BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.buildClient

+
BUILDCLIENT Creates a BlobServiceClient based on options set in the builder
+  A built BlobServiceClient object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.connectionString

+
CONNECTIONSTRING Sets the connection string to connect to the service
+  connectionString should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.endpoint

+
ENDPOINT Sets the blob service endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.retryOptions

+
RETRYOPTIONS Sets request retry options for all requests made through the client
+  retryOptions may be either a com.azure.storage.common.policy.RequestRetryOptions
+  or a azure.storage.common.policy.RequestRetryOptions object.
+  An updated azure.storage.blob.BlobServiceClientBuilder object is returned.
+
+
+
+
+

azure.storage.blob.BlobServiceClientBuilder.sasToken

+
SASTOKEN Sets the SAS token used to authorize requests
+  sasToken should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+
+

azure.storage.common

+
+
+

azure.storage.common.policy

+
+
+

azure.storage.common.policy.RequestRetryOptions

+

Superclass: azure.object

+
REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory
+  The default constructor azure.storage.common.policy.RequestRetryOptions() returns an
+  object with retry values:
+ 
+      retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional
+                       A RetryPolicyType specifying the type of retry pattern
+                       to use, default value is EXPONENTIAL
+ 
+             maxTries: Optional int32
+                       Maximum number of attempts an operation will be retried
+                       default is 4
+ 
+  tryTimeoutInSeconds: Optional int32
+                       Specifies the maximum time allowed before a request is
+                       cancelled and assumed failed, default is intmax s
+ 
+       retryDelayInMs: Optional int64
+                       Specifies the amount of delay to use before retrying an
+                       operation, default value is 4ms
+ 
+    maxRetryDelayInMs: Optional int64
+                       Specifies the maximum delay allowed before retrying an
+                       operation, default value is 120ms
+ 
+        secondaryHost: Optional character vector or scalar string
+
+
+
+

azure.storage.common.policy.RequestRetryOptions.RequestRetryOptions

+
REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory
+  The default constructor azure.storage.common.policy.RequestRetryOptions() returns an
+  object with retry values:
+ 
+      retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional
+                       A RetryPolicyType specifying the type of retry pattern
+                       to use, default value is EXPONENTIAL
+ 
+             maxTries: Optional int32
+                       Maximum number of attempts an operation will be retried
+                       default is 4
+ 
+  tryTimeoutInSeconds: Optional int32
+                       Specifies the maximum time allowed before a request is
+                       cancelled and assumed failed, default is intmax s
+ 
+       retryDelayInMs: Optional int64
+                       Specifies the amount of delay to use before retrying an
+                       operation, default value is 4ms
+ 
+    maxRetryDelayInMs: Optional int64
+                       Specifies the maximum delay allowed before retrying an
+                       operation, default value is 120ms
+ 
+        secondaryHost: Optional character vector or scalar string
+
+
+
+
+
+

azure.storage.common.policy.RetryPolicyType

+
RetryPolicyType Defines holds possible options for retry backoff algorithms
+  They may be used with RequestRetryOptions.
+  Values are EXPONENTIAL & FIXED
+
+
+
Enumeration values:
+  EXPONENTIAL
+  FIXED
+
+
+
+

azure.storage.common.policy.RetryPolicyType.RetryPolicyType

+
RetryPolicyType Defines holds possible options for retry backoff algorithms
+  They may be used with RequestRetryOptions.
+  Values are EXPONENTIAL & FIXED
+
+
+
+
+

azure.storage.common.policy.RetryPolicyType.toJava

+
TOJAVA Converts to a com.azure.storage.common.policy.RetryPolicyType Java object
+
+
+
+
+

azure.storage.common.policy.RetryPolicyType.toString

+
TOSTRING Returns text form of a RetryPolicyType
+  A character vector is returned.
+
+
+
+
+

azure.storage.common.policy.RetryPolicyType.valueOf

+
VALUEOF Returns the enum constant of this type with the specified name
+
+
+
+
+
+

azure.storage.common.sas

+
+
+

azure.storage.common.sas.AccountSasPermission

+

Superclass: azure.object

+
ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on an AccountSasSignatureValues
+  object
+
+
+
+

azure.storage.common.sas.AccountSasPermission.AccountSasPermission

+
ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on an AccountSasSignatureValues
+  object
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasCreatePermission

+
HASCREATEPERMISSION Returns the create permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasDeletePermission

+
HASDELETEPERMISSION Returns the delete permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasListPermission

+
HASLISTPERMISSION Returns the list permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasProcessMessages

+
HASPROCESSMESSAGES Returns the process messages permission
+  This allows the retrieval and deletion of queue messages.
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasUpdatePermission

+
HASUPDATEPERMISSION Returns the update permission status
+  It allows the update of queue message and tables.
+  This allows the retrieval and deletion of queue messages.
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.hasWritePermission

+
HASWRITEPERMISSION Returns the write permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.parse

+
PARSE Creates an AccountSasPermission from the specified permissions string
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+  Expected characters are r, w, d, l, a, c, u, or p.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setCreatePermission

+
SETCREATEPERMISSION Sets the create permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setDeletePermission

+
SETDELETEPERMISSION Sets the delete permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setListPermission

+
SETLISTPERMISSION Sets the list permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setProcessMessages

+
SETPROCESSMESSAGES Sets the process messages permission
+  This allows the retrieval and deletion of queue messages.
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setReadPermission

+
SETREADPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setUpdatePermission

+
SETUPDATEPERMISSION Sets the update permission status
+  This allows the update of queue messages and tables.
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.setWritePermission

+
SETWRITEPERMISSION Sets the write permission status
+  The permission argument should be of type logical.
+  A azure.storage.common.sas.AccountSasPermission object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType

+

Superclass: azure.object

+
ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services
+  Setting a value to true means that any SAS which uses these permissions will
+  grant access to that resource type.
+  Once the required values are set serialize the object with toString for use
+  as the resources field on an AccountSasSignatureValues object.
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.AccountSasResourceType

+
ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services
+  Setting a value to true means that any SAS which uses these permissions will
+  grant access to that resource type.
+  Once the required values are set serialize the object with toString for use
+  as the resources field on an AccountSasSignatureValues object.
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.isContainer

+
ISCONTAINER Returns true if the resource is a Container otherwise false
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.isObject

+
ISOBJECT Returns true if the resource is an object otherwise false
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.isService

+
ISSERVICE Returns true if the resource is a Service otherwise false
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.parse

+
PARSE Creates an AccountSasResourceType from the specified permissions string
+  Creates an AccountSasResourceType from the specified resource types string.
+  Throws an IllegalArgumentException if passed a character that does not
+  correspond to a valid resource type.
+  Expected characters are s, c, or o.
+  A azure.storage.common.sas.AccountSasResourceType object is returned.
+  resourceTypesString should be of type scalar string or character vector.
+  This is a static method.
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.setContainer

+
SETCONTAINER Sets the access status for container level APIs
+  Grants access to Blob Containers, Tables, Queues, and File Shares.
+  The container argument should be of type logical.
+  A azure.storage.common.sas.AccountSasResourceType object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.setObject

+
SETOBJECT Sets the access status for object level APIs
+  Grants access to Blobs, Table Entities, Queue Messages, Files.
+  The object argument should be of type logical.
+  A azure.storage.common.sas.AccountSasResourceType object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.setService

+
SETSERVICE Sets the access status for service level APIs
+  The service argument should be of type logical.
+  A azure.storage.common.sas.AccountSasResourceType service is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasResourceType.toString

+
TOSTRING Converts the given permissions to a String
+  This method is used to serialize an AccountSasResourceType 
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.common.sas.AccountSasService

+

Superclass: azure.object

+
ACCOUNTSASSERVICE Construct a string representing the Account SAS services
+  Setting a value to true means that any SAS which uses these permissions will
+  grant access to that service. Once required values are set the object should
+  be serialized with toString and set as the services field on an
+  AccountSasSignatureValues object.
+
+
+
+

azure.storage.common.sas.AccountSasService.AccountSasService

+
ACCOUNTSASSERVICE Construct a string representing the Account SAS services
+  Setting a value to true means that any SAS which uses these permissions will
+  grant access to that service. Once required values are set the object should
+  be serialized with toString and set as the services field on an
+  AccountSasSignatureValues object.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.hasBlobAccess

+
HASBLOBACCESS Returns the access status for blob resources
+  The result is returned as a logical
+
+
+
+
+

azure.storage.common.sas.AccountSasService.hasFileAccess

+
HASFILEACCESS Returns the access status for file resources
+  The result is returned as a logical
+
+
+
+
+

azure.storage.common.sas.AccountSasService.hasQueueAccess

+
HASQUEUEACCESS Returns the access status for queue resources
+  The result is returned as a logical
+
+
+
+
+

azure.storage.common.sas.AccountSasService.hasTableAccess

+
HASTABLEACCESS Returns the access status for table resources
+  The result is returned as a logical
+
+
+
+
+

azure.storage.common.sas.AccountSasService.parse

+
PARSE Creates an AccountSasService from the specified permissions string
+  A azure.storage.common.sas.AccountSasService object is returned.
+  servicesString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid service.
+  Expected characters are b, f, q, or t.
+  This is a static method.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.setBlobAccess

+
SETBLOBACCESS Sets the access status for blob resources
+  The blob argument should be of type logical.
+  A azure.storage.common.sas.AccountSasService object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.setFileAccess

+
SETFILEACCESS Sets the access status for file resources
+  The file argument should be of type logical.
+  A azure.storage.common.sas.AccountSasService object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.setQueueAccess

+
SETQUEUEACCESS Sets the access status for queue resources
+  The queue argument should be of type logical.
+  A azure.storage.common.sas.AccountSasService object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.setTableAccess

+
SETTABLEACCESS Sets the access status for table resources
+  The table argument should be of type logical.
+  A azure.storage.common.sas.AccountSasService object is returned.
+
+
+
+
+

azure.storage.common.sas.AccountSasService.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.common.sas.AccountSasSignatureValues

+

Superclass: azure.object

+
ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    assv = azure.storage.common.sas.AccountSasSignatureValues( ...
+               expiryTime, permissions, services, resourceTypes);
+ 
+  Argument types:
+    expiryTime: datetime
+    permissions: azure.storage.common.sas.AccountSasPermission
+    services: azure.storage.common.sas.AccountSasService
+    resourceTypes: azure.storage.common.sas.AccountSasResourceType
+
+
+
+

azure.storage.common.sas.AccountSasSignatureValues.AccountSasSignatureValues

+
ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    assv = azure.storage.common.sas.AccountSasSignatureValues( ...
+               expiryTime, permissions, services, resourceTypes);
+ 
+  Argument types:
+    expiryTime: datetime
+    permissions: azure.storage.common.sas.AccountSasPermission
+    services: azure.storage.common.sas.AccountSasService
+    resourceTypes: azure.storage.common.sas.AccountSasResourceType
+
+
+
+
+
+

azure.storage.common.StorageSharedKeyCredential

+

Superclass: azure.object

+
STORAGESHAREDKEYCREDENTIAL SharedKey credential policy 
+  Used to put into a header to authorize requests.
+
+
+
+

azure.storage.common.StorageSharedKeyCredential.StorageSharedKeyCredential

+
STORAGESHAREDKEYCREDENTIAL SharedKey credential policy 
+  Used to put into a header to authorize requests.
+
+
+
+
+

azure.storage.common.StorageSharedKeyCredential.getAccountName

+
GETACCOUNTNAME Gets the account name associated with the request
+  The accountName is returned as a character vector.
+
+
+
+
+
+

azure.storage.file

+
+
+

azure.storage.file.datalake

+
+
+

azure.storage.file.datalake.models

+
+
+

azure.storage.file.datalake.models.PathItem

+

Superclass: azure.object

+
Copyright 2022 The MathWorks, Inc.
+
+
+
+

azure.storage.file.datalake.models.PathItem.PathItem

+
Copyright 2022 The MathWorks, Inc.
+
+
+
+
+

azure.storage.file.datalake.models.PathItem.getName

+
GETNAME Get the name property
+  A character vector is returned.
+
+
+
+
+

azure.storage.file.datalake.models.PathItem.isDirectory

+
ISDIRECTORY Get the isDirectory property
+  A logical is returned.
+
+
+
+
+
+

azure.storage.file.datalake.models.PathProperties

+

Superclass: azure.object

+
Copyright 2022 The MathWorks, Inc.
+
+
+
+

azure.storage.file.datalake.models.PathProperties.PathProperties

+
Copyright 2022 The MathWorks, Inc.
+
+
+
+
+
+

azure.storage.file.datalake.sas

+
+
+

azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues

+

Superclass: azure.object

+
DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime:  datetime ideally with defined TimeZone to avoid any 
+                 confusion, if TimeZone is not set, 'local' is assumed
+    permissions: azure.storage.file.datalake.sas.PathSasPermission or
+                 FileSystemSasPermission
+  Or
+ 
+    dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier);
+ 
+  Argument types:
+    identifier:  Creates an object with the specified identifier.
+                 NOTE: Identifier can not be used for a UserDelegationKey SAS.
+                 Type character vector or scalar string.
+
+
+
+

azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues.DataLakeServiceSasSignatureValues

+
DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime:  datetime ideally with defined TimeZone to avoid any 
+                 confusion, if TimeZone is not set, 'local' is assumed
+    permissions: azure.storage.file.datalake.sas.PathSasPermission or
+                 FileSystemSasPermission
+  Or
+ 
+    dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier);
+ 
+  Argument types:
+    identifier:  Creates an object with the specified identifier.
+                 NOTE: Identifier can not be used for a UserDelegationKey SAS.
+                 Type character vector or scalar string.
+
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission

+

Superclass: azure.object

+
FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.FileSystemSasPermission

+
FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission

+
HASCREATEPERMISSION Returns the create permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission

+
HASDELETEPERMISSION Returns the delete permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission

+
HASEXECUTEPERMISSION Returns the execute permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission

+
HASLISTPERMISSION Returns the list permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission

+
HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission

+
HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission

+
HASMOVEPERMISSION Returns the move permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission

+
HASWRITEPERMISSION Returns the write permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.parse

+
PARSE Creates a FileSystemSasPermission from the specified permissions string
+  A azure.storage.file.datalake.sas.FileSystemPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission

+
SETCREATEPERMISSION Sets the create permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission

+
SETDELETEPERMISSION Sets the delete permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission

+
SETEXECUTEPERMISSION Sets the execute permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission

+
SETADDPERMISSION Sets the list permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission

+
SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission

+
SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission

+
SETMOVEPERMISSION Sets the move permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission

+
SETCREATEPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission

+
SETWRITEPERMISSION Sets the write permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.FileSystemSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission

+

Superclass: azure.object

+
PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.PathSasPermission

+
PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission

+
HASCREATEPERMISSION Returns the create permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission

+
HASDELETEPERMISSION Returns the delete permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission

+
HASEXECUTEPERMISSION Returns the execute permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasListPermission

+
HASLISTPERMISSION Returns the list permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission

+
HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission

+
HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission

+
HASMOVEPERMISSION Returns the move permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission

+
HASWRITEPERMISSION Returns the write permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.parse

+
PARSE Creates a PathSasPermission from the specified permissions string
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission

+
SETCREATEPERMISSION Sets the create permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission

+
SETDELETEPERMISSION Sets the delete permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission

+
SETEXECUTEPERMISSION Sets the execute permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setListPermission

+
SETADDPERMISSION Sets the list permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission

+
SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission

+
SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setMovePermission

+
SETMOVEPERMISSION Sets the move permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setReadPermission

+
SETREADPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.setWritePermission

+
SETWRITEPERMISSION Sets the write permission status
+  The permission argument should be of type logical.
+  A azure.storage.file.datalake.sas.PathSasPermission object is returned.
+
+
+
+
+

azure.storage.file.datalake.sas.PathSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient

+

Superclass: azure.object

+
DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake
+  This client is instantiated through DataLakePathClientBuilder
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.DataLakeDirectoryClient

+
DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake
+  This client is instantiated through DataLakePathClientBuilder
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.createFile

+
CREATEFILE Creates a new file within a directory
+  By default, this method will not overwrite an existing file.
+  To enable overwrite set an overwrite argument to true.
+  A azure.storage.file.datalake.DataLakeDirectoryClient is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.delete

+
DELETE DataLakeDirectoryClient destructor - in MATLAB delete is a reserved
+  method name for the class destructor. This method does not delete
+  files on Azure. To delete the Azure files use the deleteDirectory
+  method in MATLAB.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory

+
DELETEDIRECTORY Deletes the directory - this is the equivalent of the "delete"
+  method in the Azure Java API but because "delete" is a reserved
+  method name in MATLAB, the method is named deleteDirectory.
+ 
+  Example:
+    client.deleteDirectory()
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile

+
DELETEFILE Deletes the file - this is the equivalent of the "delete"
+  method in the Azure Java API but because "delete" is a reserved
+  method name in MATLAB, the method is named deleteFile.
+ 
+  Example:
+    client.deleteFile('myfile.txt')
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory

+
DELETESUBDIRECTORY Deletes the specified sub-directory in the directory
+  If the sub-directory doesn't exist or is not empty the operation fails.
+  subdirectoryName is provided as a character vector or scalar string.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.exists

+
EXISTS Gets if the path this client represents exists in Azure
+  This does not guarantee that the path type (file/directory) matches expectations.
+  E.g. a DataLakeFileClient representing a path to a datalake directory will
+  return true, and vice versa.
+  A logical is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath

+
GETDIRECTORYPATH Gets the path of this file, not including the name of the resource itself
+  A character vector is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl

+
GETDIRECTORYURL Gets the URL of the directory represented by this client
+  A matlab.net.URI is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient

+
GETFILECLIENT Create a DataLakeFileClient concatenating fileName to the DataLakeDirectoryClient
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.listPaths

+
LISTPATHS Returns a list of files/directories in this account
+  Paths are returned as an array of 
+  azure.storage.file.datalake.models.PathItem objects.
+  If there are no keys an empty array is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeDirectoryClient.rename

+
RENAME Moves the directory to another location within the file system
+  Arguments must be scalar strings or character vectors.
+ 
+  destinationFileSystem is the file system of the destination within the account.
+  Use an empty array [] to use the current file system.
+ 
+  destinationPath Relative path from the file system to rename the directory to.
+  This excludes the file system name, e.g. to move a directory with:
+     fileSystem = "myfilesystem", path = "mydir/mysubdir"
+  to another path in myfilesystem e.g.: newdir then set the destinationPath to "newdir"
+ 
+  A DataLakeDirectoryClient used to interact with the newly created directory is returned.
+
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient

+

Superclass: azure.object

+
DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake
+  This client is instantiated through DataLakePathClientBuilder or retrieved via
+  getFileClient().
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.DataLakeFileClient

+
DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake
+  This client is instantiated through DataLakePathClientBuilder or retrieved via
+  getFileClient().
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.delete

+
DELETE DataLakeFileClient destructor - in MATLAB delete is a reserved
+  method name for the class destructor. This method does not delete
+  files on Azure. To delete the Azure files use the deleteFile
+  method in MATLAB.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.deleteFile

+
DELETEFILE Deletes the file - this is the equivalent of the "delete"
+  method in the Azure Java API but because "delete" is a reserved
+  method name in MATLAB, the method is named deleteFile.
+ 
+  Example:
+    client.deleteFile()
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.exists

+
EXISTS Gets if the path this client represents exists in Azure
+  This does not guarantee that the path type (file/directory) matches expectations.
+  E.g. a DataLakeFileClient representing a path to a datalake directory will
+  return true, and vice versa.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.getFilePath

+
GETFILEPATH Gets the path of this file, not including the name of the resource itself
+  A character vector is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.getFileUrl

+
GETFILEURL Gets the URL of the file represented by this client
+  A matlab.net.URI is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.readToFile

+
READTOFILE Reads the entire file into a file specified by the path
+  By default a file will not be overwritten and if the file already exists a 
+  FileAlreadyExistsException Java will be thrown. A logical overwrite flag
+  can be optionally provided.
+  An azure.storage.file.datalake.models.PathProperties is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.rename

+
RENAME Moves the file to another location within the file system
+  Arguments must be scalar strings or character vectors.
+ 
+  destinationFileSystem is the file system of the destination within the account.
+  Use a string or character vector of zero length for the current file system.
+ 
+  destinationPath is the relative path from the file system to rename the file to.
+  This excludes the file system name, e.g. to move a file with:
+     fileSystem = "myfilesystem", path = "mydir/hello.txt"
+  to another path in myfilesystem e.g.: newdir/hi.txt
+  then set the destinationPath = "newdir/hi.txt"
+ 
+  A DataLakeFileClient used to interact with the newly created file is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileClient.uploadFromFile

+
UPLOADFROMFILE Creates a file with the content of the specified file
+  By default, this method will not overwrite an existing file.
+  filePath is provided as a character vector or scalar string.
+
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient

+

Superclass: azure.object

+
DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations
+  This client is instantiated through DataLakeFileSystemClientBuilder
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.DataLakeFileSystemClient

+
DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations
+  This client is instantiated through DataLakeFileSystemClientBuilder
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory

+
CREATEDIRECTORY Creates a new directory within a file system
+  By default, this method will not overwrite an existing directory.
+  To enable overwrite set an overwrite argument to true.
+  A azure.storage.file.datalake.DataLakeDirectoryClient is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.delete

+
DELETE DataLakeFileSystemClient destructor - in MATLAB delete is a reserved
+  method name for the class destructor. This method does not delete
+  files on Azure. To delete the Azure files use the deleteFileSystem
+  method in MATLAB.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory

+
DELETEDIRECTORY Deletes the specified directory
+ 
+  Example:
+    client.deleteDirectory('myDirectory')
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile

+
DELETEFILE Deletes the file - this is the equivalent of the "delete"
+  method in the Azure Java API but because "delete" is a reserved
+  method name in MATLAB, the method is named deleteFile.
+ 
+  Example:
+    client.deleteFile('myfile.txt')
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.generateSas

+
GENERATESAS Generates a SAS for the blob
+  The client must be authenticated via StorageSharedKeyCredential
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClient.listPaths

+
LISTPATHS Returns a list of files/directories in this account
+  Paths are returned as an array of 
+  azure.storage.file.datalake.models.PathItem objects.
+  If there are no keys an empty array is returned.
+
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder

+

Superclass: azure.object

+
DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.DataLakeFileSystemClientBuilder

+
DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient

+
BUILDFILESYSTEMCLIENT Creates a DataLakeFileSystemClient based on the builder
+  Returns a DataLakeFileSystemClient created from the configurations in this builder.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential
+  or azure.core.credential.TokenCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint

+
ENDPOINT Sets the client endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName

+
FILESYSTEMNAME Sets the name of the file/directory
+  If the path name contains special characters, pass in the url encoded version
+  of the path name.
+  A azure.storage.file.datalake.DataLakeFileSystemClientBuilder is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken

+
SASTOKEN Sets the SAS token used to authorize requests sent to the service
+  This string should only be the query parameters (with or without a leading
+  '?') and not a full url.
+  An updated builder is returned.
+
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder

+

Superclass: azure.object

+
DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.DataLakePathClientBuilder

+
DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient

+
BUILDDIRECTORYCLIENT Creates a DataLakeDirectoryClient based on the builder
+  Returns a buildDirectoryClient created from the configurations in this builder.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient

+
BUILDFILECLIENT Creates a DataLakeFileClient based on options set in the builder
+  Returns a DataLakeFileClient created from the configurations in this builder.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential
+  or azure.core.credential.TokenCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.endpoint

+
ENDPOINT Sets the client endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName

+
fileSystemName Sets the name of the file system that contains the path
+  If the value null or empty the root file system, $root, will be used.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.pathName

+
PATHNAME Sets the name of the file/directory
+  If the path name contains special characters, pass in the url encoded version
+  of the path name.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.file.datalake.DataLakePathClientBuilder.sasToken

+
SASTOKEN Sets the SAS token used to authorize requests sent to the service
+  This string should only be the query parameters (with or without a leading
+  '?') and not a full url.
+  A azure.storage.file.datalake.DataLakePathClientBuilder is returned.
+
+
+
+
+
+

azure.storage.queue

+
+
+

azure.storage.queue.models

+
+
+

azure.storage.queue.models.PeekedMessageItem

+

Superclass: azure.object

+
PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.PeekedMessageItem

+
PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.getDequeueCount

+
GETDEQUEUECOUNT Get the number of times the message has been dequeued
+  An int64 is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.getExpirationTime

+
GETEXPIRATIONTIME Get the time the Message was inserted into the queue
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.getInsertionTime

+
GETINSERTIONTIME Get the time the Message was inserted into the queue
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.getMessageId

+
GETMESSAGEID Get the Id of the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.getMessageText

+
GETMESSAGETEXT Get the content of the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.setDequeueCount

+
SETDEQUEUECOUNT Set the DequeueCount property
+  The DequeueCount may be of type integer
+  A PeekedMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.setExpirationTime

+
SETEXPIRATIONTIME  The time the Message was inserted into the Queue
+  Expiration time should be of type datetime with a time zone set.
+  A PeekedMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.setInsertionTime

+
SETINSERTIONTIME  The time the Message was inserted into the Queue
+  Insertion time should be of type datetime with a time zone set.
+  A PeekedMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.setMessageId

+
SETMESSAGEID Set the messageId property
+  The messageId may be of type character vector or scalar string
+  A PeekedMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.PeekedMessageItem.setMessageText

+
SETMESSAGETEXT Set the messageId property
+  The messageText may be of type character vector or scalar string
+  A PeekedMessageItem is returned.
+
+
+
+
+
+

azure.storage.queue.models.QueueItem

+

Superclass: azure.object

+
QUEUEITEM Azure Storage Queue
+
+
+
+

azure.storage.queue.models.QueueItem.QueueItem

+
QUEUEITEM Azure Storage Queue
+
+
+
+
+

azure.storage.queue.models.QueueItem.getName

+
GETNAME Returns the queue's name as a character vector
+
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem

+

Superclass: azure.object

+
QUEUEMESSAGEITEM Returned when calling Get Messages on a queue
+
+
+
+

azure.storage.queue.models.QueueMessageItem.QueueMessageItem

+
QUEUEMESSAGEITEM Returned when calling Get Messages on a queue
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getDequeueCount

+
GETDEQUEUECOUNT Get the number of times the message has been dequeued
+  An int64 is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getExpirationTime

+
GETEXPIRATIONTIME Get the time the Message was inserted into the queue
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getInsertionTime

+
GETINSERTIONTIME Get the time the Message was inserted into the queue
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getMessageId

+
GETMESSAGEID Get the Id of the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getMessageText

+
GETMESSAGETEXT Get the content of the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getPopReceipt

+
GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.getTimeNextVisible

+
GETTIMENEXTVISIBLE Get the timeNextVisible property
+  The time that the message will again become visible in the Queue.
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setDequeueCount

+
SETDEQUEUECOUNT Set the DequeueCount property
+  The DequeueCount may be of type integer
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setExpirationTime

+
SETEXPIRATIONTIME  The time the Message was inserted into the Queue
+  Expiration time should be of type datetime with a time zone set.
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setInsertionTime

+
SETINSERTIONTIME  The time the Message was inserted into the Queue
+  Insertion time should be of type datetime with a time zone set.
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setMessageId

+
SETMESSAGEID Set the messageId property
+  The messageId may be of type character vector or scalar string
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setMessageText

+
SETMESSAGETEXT Set the messageId property
+  The messageText may be of type character vector or scalar string
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setPopReceipt

+
SETPOPRECEIPT Set the messageId property
+  The popReceipt may be of type character vector or scalar string
+  A QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.models.QueueMessageItem.setTimeNextVisible

+
SETTIMENEXTVISIBLE Set the timeNextVisible property
+  The time that the message will again become visible in the Queue.
+  The time should be of type datetime with a time zone set.
+  A QueueMessageItem is returned.
+
+
+
+
+
+

azure.storage.queue.models.QueueProperties

+

Superclass: azure.object

+
QUEUEPROPERTIES Class containing properties of a specific queue
+
+
+
+

azure.storage.queue.models.QueueProperties.QueueProperties

+
QUEUEPROPERTIES Class containing properties of a specific queue
+
+
+
+
+

azure.storage.queue.models.QueueProperties.getApproximateMessageCount

+
GETAPPROXIMATEMESSAGECOUNT Gets the approximate number of messages  in the queue
+  Applies at the time of properties retrieval.
+  An int64 is returned.
+
+
+
+
+
+

azure.storage.queue.models.SendMessageResult

+

Superclass: azure.object

+
SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue
+
+
+
+

azure.storage.queue.models.SendMessageResult.SendMessageResult

+
SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue
+
+
+
+
+

azure.storage.queue.models.SendMessageResult.getExpirationTime

+
GETEXPIRATIONTIME Time the Message will expire and be automatically deleted
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.SendMessageResult.getInsertionTime

+
GETINSERTIONTIME Get the time the Message was inserted into the queue
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+

azure.storage.queue.models.SendMessageResult.getPopReceipt

+
GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.models.SendMessageResult.getTimeNextVisible

+
GETTIMENEXTVISIBLE Get the timeNextVisible property
+  The time that the message will again become visible in the Queue.
+  A datetime value is returned, with time zone configured for UTC.
+
+
+
+
+
+

azure.storage.queue.sas

+
+
+

azure.storage.queue.sas.QueueSasPermission

+

Superclass: azure.object

+
QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a QueueSasSignatureValues
+  object
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.QueueSasPermission

+
QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS
+  Setting a value to true means that any SAS which uses these permissions will
+  grant permissions for that operation.
+  Once the required values are set, the object should be serialized with
+  toString and set as the permissions field on a QueueSasSignatureValues
+  object
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.hasAddPermission

+
HASADDPERMISSION Returns the add permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.hasProcessPermission

+
HASPROCESSPERMISSION Returns the process permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.hasReadPermission

+
HASREADPERMISSION Returns the read permission status
+  The result is returned as a logical.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission

+
HASUPDATEPERMISSION Returns the update permission status
+  The result is returned as a logical
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.parse

+
PARSE Creates a QueueSasPermission from the specified permissions string
+  A azure.storage.queue.sas.QueueSasPermission object is returned.
+  permString should be of type scalar string or character vector.
+  Throws an IllegalArgumentException if it encounters a character that does
+  not correspond to a valid permission.
+  This is a static method.
+  Expected characters are r, a, u, or p.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.setAddPermission

+
SETADDPERMISSION Sets the add permission status
+  The permission argument should be of type logical.
+  A azure.storage.queue.sas.QueueSasPermission object is returned.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.setProcessPermission

+
SETPROCESSPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.queue.sas.QueueSasPermission object is returned.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.setReadPermission

+
SETREADPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.queue.sas.QueueSasPermission object is returned.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.setUpdatePermission

+
SETUPDATEPERMISSION Sets the read permission status
+  The permission argument should be of type logical.
+  A azure.storage.queue.sas.QueueSasPermission object is returned.
+
+
+
+
+

azure.storage.queue.sas.QueueSasPermission.toString

+
TOSTRING Converts the given permissions to a String
+  A character vector is returned.
+
+
+
+
+
+

azure.storage.queue.sas.QueueServiceSasSignatureValues

+

Superclass: azure.object

+
QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime: datetime
+    permissions: azure.storage.queue.sas.QueueSasPermission
+
+
+
+

azure.storage.queue.sas.QueueServiceSasSignatureValues.QueueServiceSasSignatureValues

+
QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service
+  When the values are set, use the generateSas method on the desired service
+  client to obtain a representation of the SAS which can then be applied to a
+  new client using the .sasToken(String) method on the desired client builder.
+ 
+  Example
+    qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions);
+ 
+  Argument types:
+    expiryTime: datetime
+    permissions: azure.storage.queue.sas.QueueSasPermission
+
+
+
+
+
+

azure.storage.queue.QueueClient

+

Superclass: azure.object

+
QUEUECLIENT Client performs generic queue operations
+
+
+
+

azure.storage.queue.QueueClient.QueueClient

+
QUEUECLIENT Client performs generic queue operations
+
+
+
+
+

azure.storage.queue.QueueClient.clearMessages

+
CLEARMESSAGES Deletes all messages in the queue
+
+
+
+
+

azure.storage.queue.QueueClient.create

+
CREATE Creates a new queue
+
+
+
+
+

azure.storage.queue.QueueClient.delete

+
DELETE QueueClient destructor - in MATLAB delete is a
+  reserved method name for the class destructor. This method
+  does not delete Queues on Azure. To delete the Azure
+  Queue use the deleteQueue method in MATLAB.
+
+
+
+
+

azure.storage.queue.QueueClient.deleteMessage

+
DELETEMESSAGE Deletes the specified message from the queue
+  The messageId and popReceipt arguments should be of type character vector or
+  scalar string
+
+
+
+
+

azure.storage.queue.QueueClient.deleteQueue

+
DELETEQUEUE Deletes the queue
+
+
+
+
+

azure.storage.queue.QueueClient.generateSas

+
GENERATESAS Generates a SAS for the queue
+  The client must be authenticated via StorageSharedKeyCredential
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.queue.QueueClient.getAccountName

+
GETACCOUNTNAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.QueueClient.getQueueName

+
GETQUEUENAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.QueueClient.getQueueUrl

+
GETQUEUEURL Get associated URL
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.QueueClient.peekMessage

+
PEEKMESSAGE Peeks the first message in the queue
+  A peek request retrieves a message from the front of the queue without
+  changing its visibility. If no message is found an empty double is
+  returned.
+
+
+
+
+

azure.storage.queue.QueueClient.receiveMessage

+
RECEIVEMESSAGE Retrieves the first message in the queue
+  The message is hidden from other operations for 30 seconds.
+  If no message is found an empty double is returned.
+
+
+
+
+

azure.storage.queue.QueueClient.receiveMessages

+
RECEIVEMESSAGES Retrieves up to the maximum number of messages from the queue
+  Messages are hidden from other operations for the timeout period.
+ 
+  maxMessages
+    Maximum number of messages to get.
+    If there are less messages exist in the queue than requested
+    all the messages will be returned. If left empty only 1 message
+    will be retrieved, the allowed range is 1 to 32 messages.
+ 
+  visibilityTimeout - Optional.
+    The timeout period for how long the message is invisible in
+    the queue. If left empty the received messages will be
+    invisible for 30 seconds. The timeout must be between 1
+    second and 7 days.
+ 
+  timeout - Optional.
+    Timeout applied to the operation.
+    If a response is not returned before the timeout concludes
+    a RuntimeException will be thrown.
+ 
+  context - TODO
+ 
+  If a any of visibilityTimeout, timeout or context are provided all must be
+  provided.
+ 
+  An array of QueueMessageItem is returned.
+
+
+
+
+

azure.storage.queue.QueueClient.sendMessage

+
SENDMESSAGE Sends a message that has a time-to-live of 7 days
+  The message is instantly visible.
+  A SendMessageResult is returned.
+
+
+
+
+
+

azure.storage.queue.QueueClientBuilder

+

Superclass: azure.object

+
QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients
+
+
+
+

azure.storage.queue.QueueClientBuilder.QueueClientBuilder

+
QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.buildClient

+
BUILDCLIENT Creates a QueueClient based on options set in the builder
+  A built QueueClient object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.connectionString

+
CONNECTIONSTRING Sets the connection string to connect to the service
+  connectionString should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.endpoint

+
ENDPOINT Sets the client endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.queueName

+
QUEUENAME Sets the name of the container that contains the queue
+  containerName should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueClientBuilder.sasToken

+
sasToken Sets the SAS token used to authorize requests
+  sasToken should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+
+

azure.storage.queue.QueueServiceClient

+

Superclass: azure.object

+
QUEUESERVICECLIENT Service client performs generic queue operations
+
+
+
+

azure.storage.queue.QueueServiceClient.QueueServiceClient

+
QUEUESERVICECLIENT Service client performs generic queue operations
+
+
+
+
+

azure.storage.queue.QueueServiceClient.createQueue

+
CREATEQUEUE Creates a queue in with the specified name
+  A QueueClient is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClient.deleteQueue

+
DELETEQUEUE Deletes a queue in with the specified name
+
+
+
+
+

azure.storage.queue.QueueServiceClient.generateAccountSas

+
GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account
+  The client must be authenticated via StorageSharedKeyCredential
+  The SAS is returned as a character vector.
+
+
+
+
+

azure.storage.queue.QueueServiceClient.getAccountName

+
GETACCOUNTNAME Get associated account name
+  A character vector is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClient.getQueueClient

+
GETQUEUECLIENT Constructs a QueueClient that interacts with the specified queue
+  A QueueClient is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClient.getQueueServiceUrl

+
GETQUEUESERVICEURL Gets the URL of the storage queue
+
+
+
+
+

azure.storage.queue.QueueServiceClient.listQueues

+
Lists all queues in the storage account without their metadata
+  TODO listQueues probably SDK bug - Only the fist page of queues is 
+  currently listed.
+
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder

+

Superclass: azure.object

+
QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.QueueServiceClientBuilder

+
QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.buildClient

+
BUILDCLIENT Creates a QueueServiceClient based on options set in the builder
+  A built QueueServiceClient object is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.connectionString

+
CONNECTIONSTRING Sets the connection string to connect to the service
+  connectionString should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.credential

+
CREDENTIAL Sets the credential used to authorize requests
+  Credential argument should be of type azure.storage.common.StorageSharedKeyCredential.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.endpoint

+
ENDPOINT Sets the client endpoint
+  The endpoint is also parsed for additional information i.e. the SAS token
+  endpoint should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.httpClient

+
HTTPCLIENT Sets the HttpClient to use for sending a receiving requests
+  Currently the Netty client is configured by default.
+  An updated builder object is returned.
+
+
+
+
+

azure.storage.queue.QueueServiceClientBuilder.sasToken

+
sasToken Sets the SAS token used to authorize requests
+  sasToken should be of type character vector or scalar string.
+  An updated builder object is returned.
+
+
+
+
+
+

azure.object

+

Superclass: dynamicprops

+
OBJECT Root Class for all Azure wrapper objects
+
+
+
+

azure.object.object

+
logObj = Logger.getLogger();
+  write(logObj,'debug','Creating root object');
+
+
+
+
+

azure.object.setSystemProperties

+
azure.object.setSystemProperties is a function.
+    v = azure.object.setSystemProperties
+
+
+
+
+
+

mathworks

+
+
+

mathworks.adx

+
+
+

mathworks.adx.NullPolicy

+
NullPolicy Enumeration used to determine how null values ard handled in MATLAB
+ 
+  Values:
+                 ErrorAny: Error if any null values are detected
+   ErrorLogicalInt32Int64: Error if null values are detected for logicals,
+                           int32s or int64s that do not support missing or NaN
+                 AllowAll: All null types to map to missing, NaN or NaT for
+                           all data types
+           Convert2Double: Convert logicals, int32s, & int64s  to doubles
+
+
+
Enumeration values:
+  ErrorAny
+  ErrorLogicalInt32Int64
+  AllowAll
+  Convert2Double
+
+
+
+

mathworks.adx.NullPolicy.NullPolicy

+
NullPolicy Enumeration used to determine how null values ard handled in MATLAB
+ 
+  Values:
+                 ErrorAny: Error if any null values are detected
+   ErrorLogicalInt32Int64: Error if null values are detected for logicals,
+                           int32s or int64s that do not support missing or NaN
+                 AllowAll: All null types to map to missing, NaN or NaT for
+                           all data types
+           Convert2Double: Convert logicals, int32s, & int64s  to doubles
+
+
+
+
+
+

mathworks.adx.KQLQuery

+
KQLQuery Runs a KQL query
+ 
+  Required argument
+    query: query to be run as a string or character vector
+ 
+  Optional arguments
+   database: Name of the the database to be used, by default a value will be
+             taken from the settings JSON file.
+ 
+   propertyNames: Property names to be applies to the query, specified as a 
+                  string array.
+ 
+   propertyValues: Property values that correspond the propertyNames, specified
+                   as a cell array.
+ 
+   type: Force the type of the query, options are "query" or "command" by default
+         the query will be examined to determine the type.
+ 
+   cluster: A non default cluster can be specified as a string or character vector.
+ 
+   bearerToken: Token used to authenticate KQL queries only, overrides JSON
+                settings file based authentication. Provided as a text scalar.
+ 
+   convertDynamics: Logical to determine if dynamic fields are decoded or not.
+ 
+   nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how
+               null values are handled in returned results.
+ 
+   useParallel: A logical to enable the use of Parallel Computing Toolbox if
+                available to improve performance on large queries.
+                Default is false.  Applies to KQL queries only.
+                See: Documentation/Performance.md for more details.
+ 
+   parallelThreshold: The number of rows above which a parpool will be started
+                      rather than just working serially, if making a large
+                      query or repeated queries then the overhead caused by 
+                      the creation of a parpool should be amortized.
+                      The default is 1000 rows.
+ 
+   verbose: A logical to enable additional output. Default is false.
+ 
+ 
+  Return values
+   result: Table containing the primary result of the query or command. If the
+           request failed the result will be a adx.control.models.ErrorResponse
+           rather than a table.
+ 
+   success: A logical to indicate if the query succeed or not.
+ 
+   requestId: The request's ID string in ADX.
+ 
+   resultTables: Returned tables including metadata, values have not been processed
+                 into MATLAB Tables.
+ 
+   dataSetHeader: For calls that use the V2 REST API the value contains version
+                  information and whether the call is progressive or not.
+                  See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader
+ 
+   dataSetCompletion: For calls that use the V2 REST API the value indicates
+                      if the request was cancelled or has an error and if so
+                      error information, in general the success value and result
+                      (adx.control.models.ErrorResponse) is simpler to work with.
+                      See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion
+
+
+
+
+

mathworks.adx.adxRoot

+
adxRoot Function to return the root folder for the ADX interface
+ 
+  ADXRoot alone will return the root for the MATLAB code in the
+  project.
+ 
+  ADXRoot with additional arguments will add these to the path
+  
+   funDir = mathworks.adx.adxRoot('app', 'functions')
+ 
+   The special argument of a negative number will move up folders, e.g.
+   the following call will move up two folders, and then into
+   Documentation.
+ 
+   docDir = mathworks.adx.adxRoot(-2, 'Documentation')
+
+
+
+
+

mathworks.adx.clustersGet

+
clustersGet Returns a Cluster object for a given or default Cluster URL
+  In the case of error a adx.control.models.ErrorResponse is returned
+  or an error is thrown.
+ 
+  Example:
+    % Get a cluster Object for the current default cluster
+    result = mathworks.adx.clustersGet();
+
+
+
+
+

mathworks.adx.createTable

+
createTable Creates a table in a given database
+  The contents of the table are not ingested, only the schema
+ 
+  Require arguments:
+    matlabTable : The matlabTable to base Kusto table upon. Type table.
+                  The table need not have content only columns of the
+                  correct types.
+      tableName : The name of the table to create. Type string.
+ 
+  Optional arguments:
+   tableProperties : Key value properties for the table, Type containers.Map.
+          database : Non default database name. Type string.
+           cluster : Non default cluster name. Type string.
+       bearerToken : Non default token value. Type string.
+ 
+  Returns a logical true and a table describing the created table or a
+  logical false and a adx.control.models.ErrorResponse or an empty MATLAB Table.
+ 
+  Example:
+ 
+    % Create a sample table T
+    LastName = ["Sanchez";"Johnson";"Li"];
+    Age = [int32(38); int32(43); int32(38)];
+    Height = [int64(71); int64(69); int64(64)];
+    Weight = [176; 163; 131];
+    T = table(LastName,Age,Height,Weight);
+    [tf, result] = mathworks.adx.createTable(T, "health")
+ 
+    tf =
+     logical
+      1
+    result =
+      1x5 table
+ 
+    TableName                                                                                                                                       Schema                                                                                                                                       DatabaseName     Folder      DocString
+    _________    ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________    ____________    _________    _________
+    "health"     "{"Name":"health","OrderedColumns":[{"Name":"LastName","Type":"System.String","CslType":"string"},{"Name":"Age","Type":"System.Int32","CslType":"int"},{"Name":"Height","Type":"System.Int64","CslType":"long"},{"Name":"Weight","Type":"System.Double","CslType":"real"}]}"     "testdb1"      <missing>    <missing>
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/create-table-command
+
+
+
+
+

mathworks.adx.dropTable

+
dropTable Drops a table from a given database
+ 
+  The .drop table command only soft deletes the data.
+  Data can't be queried, but is still recoverable from persistent storage.
+  The underlying storage artifacts are hard-deleted according to the
+  recoverability property in the retention policy that was in effect at
+  the time the data was ingested into the table.
+ 
+  Require argument:
+      tableName : The name of the table to drop. Type string.
+ 
+  Optional arguments:
+       ifExists : If specified and if true the command won't fail if the table
+                  doesn't exist. Type logical.
+       database : Non default database name. Type string.
+        cluster : Non default cluster name. Type string.
+    bearerToken : Non default token value. Type string.
+ 
+  Returns a table of remaining tables and some properties or an
+  adx.control.models.ErrorResponse.
+ 
+  Example:
+ 
+      result = mathworks.adx.dropTable("TestTable")
+  result =
+    5x4 table
+          TableName        DatabaseName     Folder      DocString
+      _________________    ____________    _________    _________
+      "airlinesmall"        "testdb1"      <missing>    <missing>
+      "airlinesmallcsv"     "testdb1"      <missing>    <missing>
+      "itable"              "testdb1"      <missing>    <missing>
+      "myparquet"           "testdb1"      <missing>    <missing>
+      "outagesTable"        "testdb1"      <missing>    <missing>
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/drop-table-command
+
+
+
+
+

mathworks.adx.exportToBlob

+
exportToBlob Exports data to an Azure blob
+ 
+  Required arguments
+   storageConnectionString: SAS URL for the destination blob
+ 
+   query: The result of the query is written to a blob.
+ 
+  Optional arguments
+   compressed: Logical to indicate if the results should be compressed, default is true
+ 
+   outputDataFormat: String to indicate the output file format the default is parquet
+                     Supported values are: csv, tsv, json, and parquet.
+ 
+   database: Database name string, the default is taken from the JSON settings file.
+ 
+   cluster: Cluster name string, the default is taken from the JSON settings file.
+ 
+   bearerToken: String containing a specific bearerToken
+ 
+  Return values
+   tf: Logical to indicate if the command succeeded.
+ 
+   Result: On success contains the result of the query on failure contains a
+           adx.control.models.ErrorResponse
+ 
+  Example:
+   exportURL = "https://<mystorageaccount>.blob.core.windows.net/<REDACTED>";
+   exportURI = matlab.net.URI(exportURL);
+   SAS = exportURI.EncodedQuery;
+   query = "table('" + "mytablename" + "', 'all')";
+   [tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query);
+   % Assuming tf == true
+   downloadURL = result.Path(1) + "?" + SAS;
+   downloadURI = matlab.net.URI(downloadURL);
+   % The default export format is parquet
+   localFile = websave("exportedTable.gz.parquet", downloadURI);
+   T = parquetread(localFile);
+  
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-export/export-data-to-storage
+
+
+
+
+

mathworks.adx.ingestFile

+
ingestTableQueue Ingests a local file to Azure Data Explorer using Azure blob
+ 
+  Arguments:
+       localFile: Path to file to be ingested.
+  
+       tableName: Table to ingest the data to.
+ 
+  Optional arguments:
+        database: database name, if not specified the database configured in
+                  the json settings file will be used.
+  
+          format: Format of the file to be ingested, if not specified the file
+                  extension will be used.
+  
+        blobName: Name of the blob to upload to, if not specified a name will be
+                  generated based on the local file.
+ 
+          cluster: Cluster name, if not specified the database configured in
+                  the json settings file will be used.
+ 
+      bearerToken: Bearer Token, if not specified the database configured in
+                  the json settings file will be used.
+ 
+            mode: "drop" drop the existing table if it exists before ingesting
+                  "create" create the table if it does not exist
+                  "add" (Default) ingest into an existing table
+ 
+  Return values:
+     success: A logical true is returned if a success message is returned.
+ 
+      result: Tabular output of the command if successful otherwise a
+              adx.control.models.ErrorResponse
+ 
+  Example:
+     % Get filename & path for the outages.parquet file
+     info = parquetinfo('outages.parquet');
+     success = mathworks.adx.ingestFile(info.Filename, 'outagesTable');
+ 
+ 
+                                    Table Exists
+   -----------------------------------------------------
+                 |       True           |     False
+   -----------------------------------------------------
+   Mode          |                      |
+   create        |   add                |    create, add
+   drop          |   drop, create, add  |    create add
+   add (default) |   add                |    error
+
+
+
+
+

mathworks.adx.ingestFileQueue

+
INGESTSINGLEFILE Ingests a local file to Azure Data Explorer using Azure blob & queue
+  
+  Arguments:
+       localFile: Path to file to be ingested.
+ 
+  Optional named arguments:
+        database: database name, if not specified the database configured in
+                  the JSON settings file will be used.
+          format: Format of the file to be ingested, if not specified the file
+                  extension will be used.
+        blobName: Name of the blob to upload to, if not specified a name will be
+                  generated based on the local file.
+         cluster: Cluster name, if not specified the database configured in
+                  the JSON settings file will be used.
+     bearerToken: Bearer Token, if not specified the database configured in
+                  the JSON settings file will be used.
+       tableName: Table to ingest the data to, default is ingestedTable-<timeDateStamp>
+ 
+  Return values
+         success: A logical true is returned if a success message is returned.
+ 
+  Example:
+     % Get filename & path for the outages.parquet file
+     info = parquetinfo('outages.parquet');
+     success = mathworks.adx.ingestFileQueue(info.Filename, 'tableName', 'outagesTable')
+
+
+
+
+

mathworks.adx.ingestFromQuery

+
ingestFromQuery Ingest data using the result of a command or query
+ 
+  This ingestion method is intended for exploration and prototyping.
+  Do not use it in production or high-volume scenarios.
+ 
+    Command           If table exists                 If table doesn't exist
+    -------------------------------------------------------------------------------------------
+    set              The command fails               The table is created and data is ingested
+    append           Data is appended to the table   The command fails
+    set-or-append    Data is appended to the table   The table is created and data is ingested
+    set-or-replace   Data replaces the data          The table is created and data is ingested
+                     in the table
+ 
+  Arguments
+          command   One of: set, append, set-or-append or set-or-replace.
+                    Type scalar text.
+ 
+        tableName   Name of the table to ingest into. Type scalar text.
+ 
+   queryOrCommand   Command or query to append to produce the dta to ingest.
+                    Type scalar text.
+ 
+  Optional named arguments
+            async   Logical to indicate if async mode should be used or not.
+                    Default is false.
+ 
+         database   Non default database name. Type scalar text.
+ 
+          cluster   Non default cluster name. Type scalar text.
+ 
+    propertyNames   One or more supported ingestion properties used
+                    to control the ingestion process.
+ 
+   propertyValues   Property values that correspond the propertyNames, specified
+                    as a cell array.
+ 
+           scopes   Non default scopes value. Type scalar text.
+ 
+  convertDynamics   Logical to determine if dynamic fields are decoded or not.
+                    Default is true.
+ 
+       nullPolicy   A mathworks.adx.NullPolicy enumeration to determine how
+                    null values are handled in returned results.
+ 
+  allowNullStrings  Logical to allow null strings in input. Kusto does not
+                    store null strings but control command may return them.
+                    Default is true.
+ 
+          verbose   A logical to enable additional output. Default is true.
+ 
+  Return values
+          success   A logical to indicate if the query succeed or not.
+ 
+           result   Table containing the primary result or first table of the
+                    command response. If the request failed the result will
+                    be a adx.control.models.ErrorResponse rather than a table.
+ 
+        requestId   The request's ID string in ADX. Type scalar string.
+ 
+         extentId   The unique identifier for the data shard that was generated
+                    by the command. Type scalar string.
+ 
+  See also:
+    https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query
+
+
+
+
+

mathworks.adx.ingestInline

+
ingestInline Ingests limited amounts of data into Kusto directly from MATLAB
+ 
+  This ingestion method is intended for exploration and prototyping.
+  Do not use it in production or high-volume scenarios.
+ 
+  The destination table should exist before calling this function.
+ 
+  You must have at least Table Ingestor permissions to run this command.
+ 
+  Arguments
+        tableName   Name of the table to ingest into. Type scalar text.
+ 
+       ingestData   Data to be ingested, must be of formats that are convertible
+                    to Kusto literals and compatible with the destination table
+                    schema. Type cell array, table, primitive variable/array.
+ 
+  Optional named arguments
+   tableExistsCheck Check if the table exists before proceeding. Type logical,
+                    default true.
+ 
+      checkSchema   Check that the destination schema is compatible with the
+                    ingest data. Type logical, default true.
+ 
+         database   Non default database name. Type scalar text.
+ 
+          cluster   Non default cluster name. Type scalar text.
+ 
+    propertyNames   One or more supported ingestion properties used
+                    to control the ingestion process.
+ 
+   propertyValues   Property values that correspond the propertyNames, specified
+                    as a cell array.
+ 
+           scopes   Non default scopes value. Type scalar text.
+ 
+  convertDynamics   Logical to determine if dynamic fields are decoded or not.
+                    Default is true.
+ 
+       nullPolicy   A mathworks.adx.NullPolicy enumeration to determine how
+                    null values are handled in returned results.
+ 
+  allowNullStrings  Logical to allow null strings in input. Kusto does not
+                    store null strings but control command may return them.
+                    Default is true.
+ 
+          verbose   A logical to enable additional output. Default is true.
+ 
+  Return values
+          success   A logical to indicate if the query succeed or not.
+ 
+           result   Table containing the primary result or first table of the
+                    command response. If the request failed the result will
+                    be a adx.control.models.ErrorResponse rather than a table.
+ 
+        requestId   The request's ID string in ADX. Type scalar string.
+ 
+         extentId   The unique identifier for the data shard that was generated
+                    by the command. Type scalar string.
+  
+  If table existence check and the schema compatibility check fail empty
+  result, requestId & extentId values are returned along with a logical false
+  success.
+ 
+  While not intended for performance sensitive applications disabling the 
+  table existence check and the schema compatibility check where appropriate
+  using tableExistsCheck and checkSchema respectively.
+ 
+  Example:
+   localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet");
+   tableName = "outages";
+   ingestData = praquetTable(1,:);
+   
+   [success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData)
+   
+   success =
+     logical
+      1
+   result =
+     1x5 table
+                      ExtentId                                    ItemLoaded                      Duration    HasErrors                 OperationId              
+       ______________________________________    _____________________________________________    ________    _________    ______________________________________
+       "8de6b799-6e12-4994-b57b-ed75e15db0a8"    "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf"    00:00:00      false      "cd4184ca-0d31-4c42-a273-5f2953f76ddf"
+   requestId = 
+       "63bb1cea-b589-45ac-82ad-00d68ca96aeb"
+   extentId = 
+       "8de6b799-6e12-4994-b57b-ed75e15db0a8"
+ 
+  See also:
+    https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-inline
+
+
+
+
+

mathworks.adx.ingestTable

+
ingestTable Ingests a MATLAB table to an Azure Data Explorer Table
+  The table is converted to a temporary local parquet file to facilitate
+  ingestion.
+ 
+  Example:
+    inputTable = parquetread("myfile.parquet");
+    [success, result] =  mathworks.adx.ingestTable(inputTable, tableName="mytablename")
+ 
+  Arguments:
+               T: A MATLAB table
+ 
+  Options:
+       tableName: A name for the table, if not specified the tabled will
+                  be named ingestedTable-<UTC timestamp>
+        database: database name, if not specified the database configured in
+                  the json settings file will be used.
+         cluster: Cluster name, if not specified the database configured in
+                  the json settings file will be used.
+     bearerToken: Bearer Token, if not specified the database configured in
+                  the json settings file will be used.
+            mode: "drop" drop an existing table with the tableName before ingesting
+                  "create" create the table if it does not exist
+                  "add" (Default) ingest into an existing table
+         verbose: Logical to enable additional feedback, default is true
+
+
+
+
+

mathworks.adx.ingestTableQueue

+
ingestTableQueue Ingests a MATLAB table to an Azure Data Explorer Table
+  The table is converted to a temporary local parquet file to facilitate
+  ingestion.
+ 
+  Arguments:
+               T: A MATLAB table.
+ 
+  Optional named arguments:
+       tableName: A name for the table, if not specified the tabled will
+                  be named ingestedTable-<UTC timestamp>
+        database: database name, if not specified the database configured in
+                  the json settings file will be used.
+         cluster: Cluster name, if not specified the database configured in
+                  the json settings file will be used.
+     bearerToken: Bearer Token, if not specified the database configured in
+                  the json settings file will be used.
+
+
+
+
+

mathworks.adx.isClusterRunning

+
isClusterRunning Returns a logical true if the cluster is running
+  If the cluster is not running a false is returned. The state is optionally 
+  displayed. An optional adx.control.models.Cluster object is returned with
+  full cluster metadata information.
+ 
+  Example:
+    tf = mathworks.adx.isClusterRunning();
+
+
+
+
+

mathworks.adx.listTables

+
listTables Returns a list of tables and their properties
+  
+  contains the specified table or all tables in the
+  database with a detailed summary of each table's properties.
+  You must have at least Database User, Database Viewer, or Database
+  Monitor permissions to run this command.
+  
+  Optional arguments
+   database: Database name string, the default is taken from the JSON settings file.
+ 
+   cluster: Cluster name string, the default is taken from the JSON settings file.
+ 
+  Returns
+   tableNames: A string array of the table names.
+ 
+   Success: Logical true if the query successfully completes, otherwise false.
+ 
+   tableDetails: A table containing metadata about the tables.
+
+
+
+
+

mathworks.adx.mgtCommand

+
mgtCommand Runs a management command
+ 
+  Required argument
+    query: query to be run as a string or character vector
+ 
+  Optional arguments
+   database: Name of the the database to be used, by default a value will be
+             taken from the settings JSON file.
+ 
+   propertyNames: Property names to be applies to the query, specified as a 
+                  string array.
+ 
+   propertyValues: Property values that correspond the propertyNames, specified
+                   as a cell array.
+ 
+   type: Force the type of the query, options are "query" or "command" by default
+         the query will be examined to determine the type.
+ 
+   scopes: For commands scopes can be specified as a string array.
+ 
+   cluster: A non default cluster can be specified as a string or character vector.
+ 
+   convertDynamics: Logical to determine if dynamic fields are decoded or not.
+ 
+   nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how
+               null values are handled in returned results.
+ 
+   verbose: A logical to enable additional output.
+ 
+  Return values
+   result: Table containing the primary result of the query or command. If the
+           request failed the result will be a adx.control.models.ErrorResponse
+           rather than a table.
+ 
+   success: A logical to indicate if the query succeed or not.
+ 
+   requestId: The request's ID string in ADX
+ 
+   resultTables: Returned tables including metadata, values have not been processed
+                 into MATLAB Tables.
+ 
+   dataSetHeader: For calls that use the V2 REST API the value contains version
+                  information and whether the call is progressive or not.
+                  See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader
+ 
+   dataSetCompletion: For calls that use the V2 REST API the value indicates
+                      if the request was canceled or has an error and if so
+                      error information, in general the success value and result
+                      (adx.control.models.ErrorResponse) is simpler to work with.
+                      See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion
+
+
+
+
+

mathworks.adx.run

+
run Runs a KQL query or management command
+  This ia a high-level interface to simplify running most queries.
+ 
+  Required argument
+    query: query to be run as a string or character vector
+ 
+  Optional arguments
+   database: Name of the the database to be used, by default a value will be
+             taken from the settings JSON file.
+ 
+   propertyNames: Property names to be applies to the query, specified as a 
+                  string array.
+ 
+   propertyValues: Property values that correspond the propertyNames, specified
+                   as a cell array.
+ 
+   type: Force the type of the query, options are "query" or "command" by default
+         the query will be examined to determine the type.
+ 
+   scopes: For commands scopes can be specified as a string array.
+ 
+   cluster: A non default cluster can be specified as a string or character vector.
+ 
+   bearerToken: Token used to authenticate KQL queries only, overrides JSON
+                settings file based authentication. Provided as a text scalar.
+ 
+   convertDynamics: Logical to determine if dynamic fields are decoded or not.
+ 
+   nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how
+               null values are handled in returned results.
+ 
+   customRowDecoder: A function handle to a function that will be called to decode
+                     Primary Result table JSON rows instead of the default decoder.
+                     See: Documentation/Performance.md for more details.
+ 
+   useParallel: A logical to enable the use of Parallel Computing Toolbox if
+                available to improve performance on large queries.
+                Default is false.  Applies to KQL queries only.
+                See: Documentation/Performance.md for more details.
+ 
+   parallelThreshold: The number of rows above which a parpool will be started
+                      rather than just working serially, if making a large
+                      query or repeated queries then the overhead caused by 
+                      the creation of a parpool should be amortized.
+                      The default is 1000 rows.
+ 
+  verbose: A logical to enable additional output.
+ 
+ 
+  Return values
+   result: Table containing the primary result of the query or command. If the
+           request failed the result will be a adx.control.models.ErrorResponse
+           rather than a table.
+ 
+   success: A boolean to indicate if the query succeed or not.
+ 
+   requestId: The request's ID string in ADX
+ 
+   resultTables: Returned tables including metadata, values have not been processed
+                 into MATLAB Tables.
+ 
+   dataSetHeader: For calls that use the V2 REST API the value contains version
+                  information and whether the call is progressive or not.
+                  See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader
+ 
+   dataSetCompletion: For calls that use the V2 REST API the value indicates
+                      if the request was cancelled or has an error and if so
+                      error information, in general the success value and result
+                      (adx.control.models.ErrorResponse) is simpler to work with.
+                      See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion
+ 
+  Example:
+     [result, success] = mathworks.adx.run('print mycol="Hello World"')
+
+
+
+
+

mathworks.adx.tSQLQuery

+
tSQLQuery Runs a T-SQL query
+  This is a higher-level wrapper function for KQLQuery which sets the
+  query propertyName and propertyValue to enable the tSQL syntax.
+  Input arguments and return values are as per KQLQuery.
+ 
+  It assumes the query_language property is not already set, if so it will
+  be overwritten.
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/t-sql
+
+
+
+
+

mathworks.adx.tableExists

+
TABLEEXISTS Returns true is a given table exists
+ 
+  Example:
+    tableExists = mathworks.adx.tableExists(tableName, database=database, cluster=cluster);
+
+
+
+
+

mathworks.internal

+
+
+

mathworks.internal.adx

+
+
+

mathworks.internal.adx.buildSettingsFile

+
buildSettingsFile Gets user input for JSON settings file fields
+  Template files can be found in <package directory>/Software/MATLAB/config
+ 
+  Optional argument
+    filename: Filename to store settings, default is <package directory>/Software/MATLAB/config/adx.Client.Settings.json>
+
+
+
+
+

mathworks.internal.adx.charOrString2Guid

+
charOrString2Guid Converts a scalar MATLAB string or char to a Kusto guid
+  Example: guid(74be27de-1e4e-49d9-b579-fe0b331d3642)
+  A scalar or empty input value must be provided.
+  If an empty value is provided guid(null) is returned.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/guid
+
+
+
+
+

mathworks.internal.adx.charOrString2String

+
charOrString2String Converts a MATLAB char or string to a Kusto string
+  A string is returned.
+  Input must be a empty, missing, scalar string or character vector.
+ 
+  If the optional logical named argument verbatim (default: false) a @ sign is
+  prepended to the string. The backslash character (\) stands for itself and
+  isn't an escape character. Prepending the @ character to string literals
+  serves as a verbatim identifier. In verbatim string literals, double quotes
+  are escaped with double quotes and single quotes are escaped with single quotes.
+ 
+  An obfuscated string is created by setting the optional named argument
+  obfuscated (default: false). It prepends a H character to a verbatim
+  or string literal. The obfuscated argument is not applied to multi-lines.
+ 
+  Multi-line string literals support newline (\n) and return (\r) characters.
+  Multi-line string literals do not support escaped characters, similar to verbatim
+  string literals. Multi-line string literals don't support obfuscation.
+ 
+  Kusto does not support null strings hence empty or missing MATLAB string
+  values are treated as follows:
+ 
+            |  Literal     Verbatim    Multi-line
+   -----------------------------------------------
+   missing  |    ""           @""        ``````
+     empty  |    ""           @""        ``````
+ 
+  If an empty string is provided "", `````` or @"" is returned.
+ 
+  Optional named arguments
+    verbatim    Logical, default: false
+    multiline    Logical, default: false
+ 
+  Verbatim and multiline cannot be enabled at the same time.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/string
+
+
+
+
+

mathworks.internal.adx.datetime2datetime

+
datetime2datetime Converts a scalar MATLAB datetime to a Kusto datetime
+  A scalar or empty input value must be provided.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/datetime
+
+
+
+
+

mathworks.internal.adx.dispErrorAdditionalInfo

+
Displays a adx.control.models.ErrorAdditionalInfo
+
+
+
+
+

mathworks.internal.adx.dispErrorDetails

+
dispErrorDetails Display a adx.control.models.ErrorDetail
+
+
+
+
+

mathworks.internal.adx.dispErrorResponse

+
dispErrorResponse Display a adx.control.models.ErrorResponse
+
+
+
+
+

mathworks.internal.adx.doubleOrSingle2Decimal

+
doubleOrSingle2Decimal Converts a MATLAB double or single to a Kusto decimal
+  A string is returned.
+  If empty decimal(null) is returned.
+  Otherwise decimal(<value>) is returned.
+  A scalar or empty input value must be provided.
+ 
+  Note Arithmetic operations involving decimal values are significantly slower
+  than operations on real data type. As MATLAB does not support floating point
+  precision beyond double using doubleOrSingle2Real() instead is recommended
+  if a real value can be used.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/decimal
+
+
+
+
+

mathworks.internal.adx.doubleOrSingle2Real

+
doubleOrSingle2Real Converts a MATLAB double or single to a Kusto real
+  A string is returned.
+  If empty real(null) is returned.
+  If nan real(nan) is returned.
+  If +inf real(+inf) is returned.
+  If -inf real(-inf) is returned.
+  A scalar or empty input value must be provided.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/real
+
+
+
+
+

mathworks.internal.adx.duration2Timespan

+
duration2Timespan Converts a MATLAB duration to a Kusto timespan
+  Input must be a scalar duration, duration.empty or duration NaN.
+  A timespan literal is returned as a scalar string.
+  At most millisecond precision is supported.
+  A duration.empty or duration NaN are returned as "timespan(null)"
+  Other values are returned in the format: "timespan(days.hours:minutes:seconds.milliseconds)"
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan
+
+
+
+
+

mathworks.internal.adx.exampleCustomRowDecoder

+
exampleCustomRowDecoder Example of a custom JSON parser function
+  Sample decoder that handles an array of rows of the form:
+   [128030544,1.0,"myStringValue-1"]
+  with fields of types int64, double and string.
+ 
+  It will not process other data and is intended for speed rather than
+  strict correctness or robustness.
+ 
+  The custom decoder is applied to the PrimaryResult rows field only.
+ 
+  It is required to return a cell array of size number of rows by the
+  number of columns that can be converted to a MATLAB table with the
+  given schema.
+ 
+  It is not required to respect input arguments flags if foreknowledge of
+  returned data permits it.
+ 
+  Custom decoders are applied to nonprogressive KQL API v2 mode queries only.
+  If support for other query types is required contact MathWorks.
+ 
+  Example:
+   query = sprintf('table("%s", "all")', tableName);
+   crd = @mathworks.internal.adx.exampleCustomRowDecoder;
+   [result, success] = mathworks.adx.run(query, customRowDecoder=crd);
+ 
+  For a generic decoder see: getRowsWithSchema.
+
+
+
+
+

mathworks.internal.adx.getDataBearerToken

+
getDataBearerToken Gets a bearer token by forcing a query
+
+
+
+
+

mathworks.internal.adx.getDefaultConfigValue

+
getDefaultConfigValue Reads a field from the config file
+  A string is returned.
+
+
+
+
+

mathworks.internal.adx.getIngestionResources

+
getIngestionResources Get queues and other values to do ingestion
+  Returns a adx.data.models.IngestionResourcesSnapshot
+
+
+
+
+

mathworks.internal.adx.getKustoIdentityToken

+
getKustoIdentityToken Management query to request a Kusto Identity Token
+  Query used is: .get kusto identity token
+
+
+
+
+

mathworks.internal.adx.getRowWithSchema

+
GETROWWITHSCHEMA Extract a row of data as a cell array from a JSON string using schemas
+  For detail on dynamic values see:
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic
+
+
+
+
+

mathworks.internal.adx.getRowsWithSchema

+
GETROWSWITHSCHEMA Extract rows of data as a cell array from a JSON string using schemas
+  For detail on dynamic values see:
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic
+
+
+
+
+

mathworks.internal.adx.getTableAndSchemas

+
getTableAndSchemas Returns a MATLAB table to store a returned Kusto table
+ 
+  The table is not populated.
+  Column names are mapped to valid MATLAB column names using matlab.lang.makeValidName
+  Datatype schemas are also returned.
+  MATLAB types mapped from the Kusto types using mathworks.internal.adx.mapTypesKustoToMATLAB
+ 
+  Required Arguments
+   columns: 1d array of adx.data.models.Column
+ 
+   numRows: Number of rows in the table
+ 
+  Optional Arguments
+   name: Name for the table, the default is: "". matlab.lang.makeValidName is applied.
+ 
+   nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled
+               Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64
+ 
+   verbose: Logical to enable additional output, default is false.
+ 
+  Return Values:
+   mTable: Unpopulated MATLAB table.
+ 
+   matlabSchema: String array of the underlying MATLAB types for columns which
+                 may be stored in a cell to enable representation of nulls
+ 
+   tableSchema: String array of the actual MATLAB column types used to create the table
+ 
+   kustoSchema: String array of the Kusto type fields for the columns also
+                stored in the table descriptions fields
+
+
+
+
+

mathworks.internal.adx.getTableSchema

+
getTableSchema
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/show-table-schema-command
+
+
+
+
+

mathworks.internal.adx.int2IntOrLong

+
int2IntOrLong Converts a MATLAB int to a Kusto int or long
+  A scalar or empty input value must be provided.
+  A scalar string is returned.
+  If empty an int(null) or long(null) is returned.
+ 
+  See also:
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/int
+    https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/long
+
+
+
+
+

mathworks.internal.adx.isMappableMATLABToKusto

+
isMappableMATLABToKusto Returns true if a MATLAB type can be converted to a given Kusto type
+ 
+  The following mappings are supported:
+ 
+   Kusto Type   MATLAB Types
+   ----------------------------------------------------
+   int          int8, uint8, int16, uint16, int32
+   long         int8, uint8, int16, uint16, int32, uint32, int64
+   string       string char
+   guid         string char
+   real         double single
+   decimal      double single
+   datetime     datetime
+   bool         logical
+   timespan     duration
+   dynamic      See optional allowDynamic flag
+ 
+  As dynamic datatype are "dynamic" the contents must be parsed to determine
+  if the can be converted the optional named argument allowDynamic if true
+  makes the assumption that a dynamic type will be convertible.
+  The default value is true. False is a more conservative value.
+
+
+
+
+

mathworks.internal.adx.kustoSchemaToNamesAndTypes

+
kustoSchemaToNamesAndTypes Splits a Kusto schema into string arrays of column names and types
+
+
+
+
+

mathworks.internal.adx.loadConfig

+
LOADCONFIG Reads a config file if it exists
+ 
+  Optional argument
+    configFile: Path to JSON settings
+
+
+
+
+

mathworks.internal.adx.logical2Bool

+
logical2Bool Converts a MATLAB logical to a Kusto bool
+  A string is returned.
+  If empty bool(null) is returned, otherwise bool(true)
+  or bool false.
+  A scalar or empty input value must be provided.
+
+
+
+
+

mathworks.internal.adx.mapTypesKustoToMATLAB

+
MAPTYPESKUSTOTOMATLAB Map Kusto datatypes to corresponding MATLAB type
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/
+  for .net mapping
+
+
+
+
+

mathworks.internal.adx.mapTypesMATLABToKusto

+
mapTypesMATLABToKusto Map MATLAB datatypes to corresponding Kusto type
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/
+  for .net mapping
+
+
+
+
+

mathworks.internal.adx.queryV1Response2Tables

+
queryV1Response2Tables Convert a v1 API response to MATLAB tables
+ 
+  Required argument
+   response: A adx.data.models.QueryV1ResponseRaw as returned by queryRun().
+ 
+  Optional arguments
+   nullPolicy: Enumeration to determine how null values should be handled.
+               Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64
+ 
+   convertDynamics: Logical to determine if dynamic fields should be decoded
+                    from JSON. Default is true.
+ 
+   allowNullStrings: Logical to allow null strings in input. Kusto does not
+                     store null strings but control command may return them.
+                     Default is false.
+ 
+   useParallel: Logical to enable the use of Parallel Computing Toolbox if available
+ 
+   parallelThreshold: Threshold for row number above which Parallel Computing
+                      Toolbox will be used, default is 1000.
+ 
+   customRowDecoder: Function handle to a non default row conversion function
+                     Function is applied to the Primary Result table only.
+                     In certain unexpected states it is not applied.
+ 
+   verbose: Logical to enable additional output, default is false.
+ 
+  Return values
+   primaryResult: The primary result as a MATLAB table.
+ 
+   resultTables: The other returned tables as MATLAB tables.
+
+
+
+
+

mathworks.internal.adx.queryV2Response2Tables

+
queryV2Response2Tables Converts a v2 API response to MATLAB tables
+ 
+  Required Argument:
+   v2Response: A adx.data.models.QueryV2ResponseRaw which been processed by JSONMapper
+ 
+  Optional Arguments:
+   convertDynamics: Logical to determine if Dynamic fields are decoded or not
+                    Default is true
+ 
+   nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled
+               Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64
+ 
+   allowNullStrings: Logical to allow null strings in input. Kusto does not
+                     store null strings but control command may return them.
+                     Default is false.
+   customRowDecoder: Function handle to a non default row conversion function
+                     Function is applied to the Primary Result table only.
+                     In certain unexpected states it is not applied.
+ 
+   useParallel: Logical to enable the use of Parallel Computing Toolbox if available
+ 
+   parallelThreshold: Threshold for row number above which Parallel Computing
+                      Toolbox will be used, default is 1000.
+ 
+   verbose: Logical to enable additional output, default is false
+ 
+  Return Values:
+   primaryResult: The primary result as a MATLAB table
+ 
+   resultTables: The other returned tables as MATLAB tables.
+ 
+   dataSetHeader: A adx.data.models.DataSetHeader describes the high-level properties
+                  of the returned data
+ 
+   dataSetCompletion: A adx.data.models.DataSetCompletion indicates success and other
+                      properties of the query
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2
+
+
+
+
+

mathworks.internal.adx.setCustomQueryHeaders

+
setCustomHeaders Sets custom header fields Query calls
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/request#request-headers
+
+
+
+
+

mathworks.internal.adx.setDefaultConfigValue

+
setDefaultConfigValue Sets a field in the config file
+
+
+
+
+

mathworks.internal.adx.timespanLiteral2duration

+
timespanLiteral2duration Converts a Kusto timespan value to a MATLAB duration
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan
+
+
+
+
+

mathworks.internal.adx.timespanValue2duration

+
timespanValue2duration Converts a timespan value to a MATALB duration
+ 
+  See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan
+
+
+
+
+

mathworks.internal.adx.toDynamic

+
toDynamic Creates a Kusto dynamic literal value
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic
+
+
+
+
+

mathworks.internal.adx.toKustoLiteral

+
toKustoLiteral Converts a MATLAB value to a Kusto Literal
+  Supports duration, logical, int, double, single, string, char, and 
+  datetime MATLAB input types.
+ 
+  See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types
+
+
+
+
+

mathworks.internal.adx.validateConfig

+
VALIDATECONFIG Sanity checks configuration settings
+
+
+
+
+

mathworks.internal.blob

+
+
+

mathworks.internal.blob.clientCopyToBlobContainer

+
clientCopyToBlobContainer Copies a file to a blob for ingestion
+  Uses MATLAB's built in copy file function.
+
+
+
+
+

mathworks.internal.blob.clientUploadToBlobContainer

+
clientUploadToBlobContainer Uploads a file to a blob for ingestion
+  Uses Azure Services support package
+
+
+
+
+

mathworks.internal.blob.sanitizeBlobName

+
sanitizeBlobName Checks that a name complies with Blob name limits
+
+
+
+
+

mathworks.internal.curl

+
+
+

mathworks.internal.curl.adxCurlWrite

+
adxCurlWrite adx caller for mathworks.internal.curlWrite
+  Inserts custom headers required by ADX.
+ 
+  This function may be changed or removed in a future release without
+  notice. currently only windows is supported.
+  It is a Proof of Concept testing mechanism to enable TCP keep-alive
+  Packets only, it should be avoided in production use.
+ 
+  Arguments:
+    clusterUrl: A cluster URL including https:// as scalar text if not provided
+                an attempt will be made to read the value from adx.Client.Settings.json
+ 
+    urlPath: Query URL path as scalar text, default: "/v1/rest/query"
+ 
+    query: KQL query to execute as scalar text, default (for PoC purposes):
+           "print mycol=""Hello World"""
+           Alternatively a a file containing the complete Query body can be
+           provided byt prefixing the file name with a "@" symbol as
+           normal in curl command syntax.
+           When the JSON body for the query is constructed only the csl
+           and db fields are populated, if further properties are
+           required then the JSON body should be provided in its
+           entirety as described above
+ 
+    bearerToken: A bearerToken as scalar text if not provided an attempt will
+                 be made to read the value from adx.Client.Settings.json
+ 
+    id: Request id header value as scalar text, if not provided a UUID is created
+ 
+ 
+    skipJSONDecode: A logical to determine if JSON is decode using MATLAB's
+                    jsondecode or not, default is true
+ 
+    propertyNames: Property names to be applies to the query, specified as a
+                   string array
+ 
+    propertyValues: Property values that correspond the propertyNames, specified
+                    as a cell array
+ 
+    verbose: A logical to enable additional feedback, default is true
+             WARNING: verbose output will display the bearer token
+ 
+ 
+  Returned values:
+    tf: Logical that indicates if a HTTP status 200 was returned
+ 
+    result: Result of the query as a string or a decoded JSON struct
+            In certain error cases an empty struct is returned
+ 
+    id: Request Id
+ 
+ 
+  Examples:
+ 
+    If called with no arguments with a adx.Client.Settings.json file
+    present containing a valid bearer token the query: print mycol='Hello World'
+    should run, returning a logical true, populated result struct and
+    request UUID:
+ 
+    [tf, result, id] = mathworks.internal.curl.adxCurlWrite()
+ 
+ 
+    Provide key arguments:
+ 
+    clusterUrl = "https://mycluster.westeurope.kusto.windows.net";
+    query = 'print mycol="Hello World"';
+    bearerToken = "eyJ0e<REDACTED>c1RuQ";
+    [tf, result, id] = mathworks.internal.adxCurlWrite(clusterUrl=clusterUrl, bearerToken=bearerToken, query=query, verbose=true)
+ 
+ 
+    Convert the primary result to a MATLAB table
+    Assumes the url path is specifying a v1 API, as per default:
+ 
+    [tf, result, id] = mathworks.internal.curl.adxCurlWrite(skipJSONDecode=true);
+    [primaryResult, resultTables] = mathworks.internal.adx.queryV1Response2Tables(result);
+ 
+ 
+    Set sample request properties & convert to a MATLAB table:
+ 
+    propertyNames = {"notruncation", "query_datetimescope_column", "servertimeout"};
+    tenMinDuration = minutes(10);
+    propertyValues = {true, "mycol", tenMinDuration};
+    [tf,result,id] = mathworks.internal.curl.adxCurlWrite(verbose=true, propertyNames=propertyNames, propertyValues=propertyValues, skipJSONDecode=true)
+    [primaryResult, ~] = mathworks.internal.adx.queryV1Response2Tables(result)
+
+
+
+
+

mathworks.internal.curl.curlWrite

+
curlWrite webwrite like functionality via curl PoC implementation
+  This function may be changed or removed in a future release without
+  notice. Currently only windows is supported.
+  Currently only the HTTP POST method is supported.
+  This function is provided as a testing mechanism for TCP keep-alive
+  Packets.
+ 
+  Required Arguments
+ 
+    url: A MATLAB.net.URI containing the host to connect to an any
+         required path elements e.g.:
+         matlab.net.URI("https://myhost.example.com:1234/path1/path2")
+ 
+    dataFilename: A scalar text value for a filename containing the JSON
+                  request body payload to send to the endpoint.
+ 
+    webOpts: A weboptions object. Used to configure curl arguments.
+             NB: This value is currently required but NOT yet used.
+ 
+  Optional Positional Argument
+ 
+    verbose: A logical in enable or disable increased logging
+             Default is true
+ 
+  Optional Named Arguments
+ 
+    keepaliveTime: An integer number of seconds after which to send a
+                   keep-alive packet. Default is 60.
+ 
+    additionalArguments: A string array of extra arguments to be appended to
+                         the generated curl command. Prefix and postfix padding
+                         will be added.
+ 
+    skipJSONDecode: A logical to skip decoding returned JSON and just
+                    return a scalar character vector. Default is false.
+ 
+  Return Value:
+ 
+    Response: Decoded JSON or a character vector containing the returned JSON
+              See: skipJSONDecode.
+ 
+  Example:
+ 
+    result = mathworks.internal.curl.curlWrite(matlab.net.URI("https://httpbin.org/post"), "", weboptions, true)
+ 
+  See also: mathworks.internal.curl.adxCurlWrite
+
+
+
+
+

mathworks.internal.countDown

+
countDown displays a countDown of wait seconds
+
+
+
+
+

mathworks.utils

+
+
+

mathworks.utils.jwt

+
+
+

mathworks.utils.jwt.ClaimsJM

+

Superclass: adx.control.JSONMapper

+
ClaimsJM JWT Claims that use JSON Mapper
+
+
+
+

mathworks.utils.jwt.ClaimsJM.ClaimsJM

+
To allow proper nesting of object, derived objects must
+  call the JSONMapper constructor from their constructor. This 
+  also allows objects to be instantiated with Name-Value pairs
+  as inputs to set properties to specified values.
+
+
+
+
+
+

mathworks.utils.jwt.JWT

+
JWT Represent a Java Web Token
+  All times as assumed to be UTC
+ 
+  This is not a generic JWT interface and is intended for use with
+  Azure Data Explorer only at this point.
+
+
+
+

mathworks.utils.jwt.JWT.JWT

+
JWT Create a JWT object from a token string
+
+
+
+
+

mathworks.utils.jwt.JWT.expiryTime

+
mathworks.utils.jwt.JWT/expiryTime is a function.
+    exp = expiryTime(obj)
+
+
+
+
+

mathworks.utils.jwt.JWT.isExpired

+
mathworks.utils.jwt.JWT/isExpired is a function.
+    tf = isExpired(obj)
+
+
+
+
+

mathworks.utils.jwt.JWT.isTimeValid

+
mathworks.utils.jwt.JWT/isTimeValid is a function.
+    tf = isTimeValid(obj)
+
+
+
+
+

mathworks.utils.jwt.JWT.notBeforeTime

+
mathworks.utils.jwt.JWT/notBeforeTime is a function.
+    nbf = notBeforeTime(obj)
+
+
+
+
+
+

mathworks.utils.msOAuth2Client

+

Superclass: handle

+
msOAuth2Client obtains and caches tokens for the Microsoft
+  Identity Platform.
+ 
+  OAuth2Client Methods:
+    OAuth2Client    - Constructor
+    getToken        - Obtain an access token for a requested scope
+    getFullToken    - Obtain the full token for a requested scope
+ 
+  Note: the access tokens and refresh tokens are stored inside a
+  MAT-file in plain-text and are not encrypted. The MAT-file is saved
+  as .mlMsTokenCache in your home directory. This file should be kept
+  confidential.
+
+
+
+

mathworks.utils.msOAuth2Client.acquireClientCredentialToken

+
mathworks.utils.msOAuth2Client/acquireClientCredentialToken is a function.
+    token = acquireClientCredentialToken(obj, scopes)
+
+
+
+
+

mathworks.utils.msOAuth2Client.acquireDeviceCodeToken

+
Initiate Device Code Authentication
+
+
+
+
+

mathworks.utils.msOAuth2Client.acquireInteractiveBrowserToken

+
mathworks.utils.msOAuth2Client/acquireInteractiveBrowserToken is a function.
+    token = acquireInteractiveBrowserToken(obj, scopes, serviceMetadataURI)
+
+
+
+
+

mathworks.utils.msOAuth2Client.acquireManagedIdentityToken

+
mathworks.utils.msOAuth2Client/acquireManagedIdentityToken is a function.
+    token = acquireManagedIdentityToken(obj, scopes)
+
+
+
+
+

mathworks.utils.msOAuth2Client.acquireToken

+
mathworks.utils.msOAuth2Client/acquireToken is a function.
+    token = acquireToken(obj, scopes)
+
+
+
+
+

mathworks.utils.msOAuth2Client.addTokenToCache

+
Check whether any tokens have been cached for the given
+  tenant at all
+
+
+
+
+

mathworks.utils.msOAuth2Client.findTokenInCache

+
Return an empty token if returning early
+
+
+
+
+

mathworks.utils.msOAuth2Client.getFullToken

+
GETFULLTOKEN Obtains a token in the same way as getToken,
+  only instead of only returning the access token itself, a
+  struct is returned which contains the accessToken, an
+  expiresAt field, and if available also a refreshToken. Then
+  syntax for this method is the same as for getToken.
+ 
+  See Also: GETTOKEN
+
+
+
+
+

mathworks.utils.msOAuth2Client.getToken

+
GETTOKEN Obtain and return an access token for the configured
+  Tenant, ClientID and Scopes.
+ 
+    If a token for configured Tenant, ClientID and Scopes:
+        - IS found in the cache and it
+            - Has NOT expired, it is returned
+            - HAS expired and a refresh token IS available, it
+              is refreshed and then returned, if refresh fails
+              a new token is requested and returned
+            - HAS expired and there is NO refresh token, a new
+              token is requested and returned
+        - Is NOT found in the cache, a new token is requested 
+          and returned upon success 
+ 
+    Note: to obtain a refresh token, explicitly include 
+    "offline_access" in the requested scopes.
+ 
+    Examples:
+ 
+        Obtain an access token for Azure Key Vault Scope with
+        refresh token:
+ 
+            access_token = GETTOKEN(["https://vault.azure.net/.default","offline_access"])
+ 
+        Obtain an access token for Azure Storage without
+        refresh token:
+ 
+            access_token = GETTOKEN(["https://storage.azure.com/.default"])
+
+
+
+
+

mathworks.utils.msOAuth2Client.initializeCache

+
Load cache from disk if it exists or start a new one
+
+
+
+
+

mathworks.utils.msOAuth2Client.msOAuth2Client

+
msOAuth2Client Constructor
+ 
+    Create a client for user principals through Device Code 
+    authentication:
+ 
+      client = msOAuth2Client(tenantId,clientId);
+ 
+    When working with Device Code authentication, user
+    interaction is needed if a new token has to be requested.
+    If the requested token already exists in the cache (and can
+    be refreshed if needed) no further user interaction should
+    be required.
+ 
+    Create a client for service principals through Client
+    Secret authentication:
+ 
+        client = msOAuth2Client(tenantId,clientId,clientSecret);
+ 
+    When working with Client Secret authentication, no user
+    interaction is required.
+
+
+
+
+

mathworks.utils.msOAuth2Client.refreshToken

+
Perform the refresh
+
+
+
+
+

mathworks.utils.msOAuth2Client.saveCache

+
Save the cache to disk
+
+
+
+
+
+

mathworks.utils.UUID

+
UUID Returns a UUID string as created by java.util.UUID.randomUUID
+
+
+
+
+

mathworks.utils.addArgs

+
addArg Builds and named argument cell array
+ 
+  Example:
+    args = mathworks.utils.addArgs(options, ["authMethod", "profileName"]);
+    x = myFunc(args{:});
+
+
+
+
+

Logger

+

Superclass: handle

+
Logger - Object definition for Logger
+  ---------------------------------------------------------------------
+  Abstract: A logger object to encapsulate logging and debugging
+            messages for a MATLAB application.
+ 
+  Syntax:
+            logObj = Logger.getLogger();
+ 
+  Logger Properties:
+ 
+      LogFileLevel - The level of log messages that will be saved to the
+      log file
+ 
+      DisplayLevel - The level of log messages that will be displayed
+      in the command window
+ 
+      LogFile - The file name or path to the log file. If empty,
+      nothing will be logged to file.
+ 
+      Messages - Structure array containing log messages
+ 
+  Logger Methods:
+ 
+      clearMessages(obj) - Clears the log messages currently stored in
+      the Logger object
+ 
+      clearLogFile(obj) - Clears the log messages currently stored in
+      the log file
+ 
+      write(obj,Level,MessageText) - Writes a message to the log
+ 
+  Examples:
+      logObj = Logger.getLogger();
+      write(logObj,'warning','My warning message')
+
+
+
+

Logger.Logger

+
Logger - Object definition for Logger
+  ---------------------------------------------------------------------
+  Abstract: A logger object to encapsulate logging and debugging
+            messages for a MATLAB application.
+ 
+  Syntax:
+            logObj = Logger.getLogger();
+ 
+  Logger Properties:
+ 
+      LogFileLevel - The level of log messages that will be saved to the
+      log file
+ 
+      DisplayLevel - The level of log messages that will be displayed
+      in the command window
+ 
+      LogFile - The file name or path to the log file. If empty,
+      nothing will be logged to file.
+ 
+      Messages - Structure array containing log messages
+ 
+  Logger Methods:
+ 
+      clearMessages(obj) - Clears the log messages currently stored in
+      the Logger object
+ 
+      clearLogFile(obj) - Clears the log messages currently stored in
+      the log file
+ 
+      write(obj,Level,MessageText) - Writes a message to the log
+ 
+  Examples:
+      logObj = Logger.getLogger();
+      write(logObj,'warning','My warning message')
+
+
+
+
+

Logger.clearLogFile

+
clearLogFile - Method to clear messages in the log file
+  -------------------------------------------------------------------------
+  Abstract: Clears the log messages currently stored in the log
+  file
+ 
+  Syntax:
+        logObj.clearLogFile(Level)
+        clearLogFile(logObj)
+ 
+  Inputs:
+        logObj - Logger object
+ 
+  Outputs:
+        none
+
+
+
+
+

Logger.clearMessages

+
clearMessages - Method to clear messages in the Logger
+  -------------------------------------------------------------------------
+  Abstract: Clears the log messages currently stored in the
+  Logger object
+ 
+  Syntax:
+        logObj.clearMessages(Level)
+        clearMessages(logObj)
+ 
+  Inputs:
+        logObj - Logger object
+ 
+  Outputs:
+        none
+
+
+
+
+

Logger.closeLogFile

+
If a log file was open, close it
+
+
+
+
+

Logger.debug

+
DEBUG List MATLAB debugging functions
+ 
+    dbstop     - Set breakpoint.
+    dbclear    - Remove breakpoint.
+    dbcont     - Resume execution.
+    dbdown     - Change local workspace context.
+    dbmex      - Enable MEX-file debugging.
+    dbstack    - List who called whom.
+    dbstatus   - List all breakpoints.
+    dbstep     - Execute one or more lines.
+    dbtype     - List file with line numbers.
+    dbup       - Change local workspace context.
+    dbquit     - Quit debug mode.
+ 
+    When a breakpoint is hit, MATLAB goes into debug mode, the debugger
+    window becomes active, and the prompt changes to a K>>.  Any MATLAB
+    command is allowed at the prompt.  
+ 
+    To resume program execution, use DBCONT or DBSTEP.  
+    To exit from the debugger use DBQUIT.
+
+
+
+
+

Logger.delete

+
If a log file was open, close it
+
+
+
+
+

Logger.error

+
Expect an MException to be returned if so catch it and throw as the
+  caller to keep logger entries out of the console output
+
+
+
+
+

Logger.getLogger

+
This method returns the singleton logger object. Only one
+  logger is allowed in a MATLAB session, and this method will
+  retrieve it.
+
+
+
+
+

Logger.log

+
LOG    Natural logarithm.
+    LOG(X) is the natural logarithm of the elements of X.
+    Complex results are produced if X is not positive.
+ 
+    See also LOG1P, LOG2, LOG10, EXP, LOGM, REALLOG.
+
+
+
+
+

Logger.openLogFile

+
Was a file name passed in?
+
+
+
+
+

Logger.processMessage

+
Called from write()
+  Handle the file logging first as if an error throwing the error
+  will halt execution and the file logging (if enabled) will not
+  happen
+  Should the message be written to the log file?
+
+
+
+
+

Logger.verbose

+
Logger.verbose is a function.
+    Logger.verbose(varargin)
+
+
+
+
+

Logger.warning

+
Logger.warning is a function.
+    Logger.warning(varargin)
+
+
+
+
+

Logger.write

+
write - Method to write messages to the Logger
+  -------------------------------------------------------------------------
+  Abstract: Adds a new message to the Logger, with the
+  specified message level and text
+ 
+  Syntax:
+        logObj.write(Level,MessageText)
+        write(logObj,Level,MessageText)
+        write(logObj,Level,MessageText,myException)
+ 
+  Inputs:
+        logObj - Logger object
+        Level - Message level string ('debug','warning',etc)
+        MessageText - Message text string
+        myException - A previously caught or created exception
+ 
+  Outputs:
+        none
+ 
+  Examples:
+        logObj = Logger.getLogger;
+        write(logObj,'warning','My warning message')
+
+
+
+
+
+

AzureCommonRoot

+
AZURECOMMONROOT Return Azure Services root location
+  Locate the installation of the Azure interface package to allow easier construction
+ 
+  The special argument of a negative number will move up folders, e.g.
+  the following call will move up two folders, and then into
+  Documentation.
+ 
+   docDir = AzureCommonRoot(-2, 'Documentation')
+
+
+
+
+

AzureShell

+
AZURESHELL Invokes the Azure Web Browser based shell
+  Cloud Shell enables access to a browser-based command-line experience with
+  Azure. It is an interactive, browser-accessible shell for managing Azure
+  resources. The shell can be Bash or PowerShell. The system configured browser
+  is used. Authentication will be requested if not already in place within the
+  browser.
+
+
+
+
+

AzureStorageExplorer

+
AZURESTORAGEEXPLORER Invokes the Azure Storage Explorer
+  Brings up the Azure Storage Explorer. It is possible to specify the local
+  installation of the storage explorer in the configuration file.
+ 
+  By default the MATLAB path will be searched for a configuration file called
+  storagesettings.json, however an alternative filename can be provided as
+  an argument to this function.
+
+
+
+
+

Logger

+
Logger - Object definition for Logger
+  ---------------------------------------------------------------------
+  Abstract: A logger object to encapsulate logging and debugging
+            messages for a MATLAB application.
+ 
+  Syntax:
+            logObj = Logger.getLogger();
+ 
+  Logger Properties:
+ 
+      LogFileLevel - The level of log messages that will be saved to the
+      log file
+ 
+      DisplayLevel - The level of log messages that will be displayed
+      in the command window
+ 
+      LogFile - The file name or path to the log file. If empty,
+      nothing will be logged to file.
+ 
+      Messages - Structure array containing log messages
+ 
+  Logger Methods:
+ 
+      clearMessages(obj) - Clears the log messages currently stored in
+      the Logger object
+ 
+      clearLogFile(obj) - Clears the log messages currently stored in
+      the log file
+ 
+      write(obj,Level,MessageText) - Writes a message to the log
+ 
+  Examples:
+      logObj = Logger.getLogger();
+      write(logObj,'warning','My warning message')
+
+
+
+
+

configureCredentials

+
CONFIGURECREDENTIALS Reads JSON configuration file and returns credentials object
+  A configuration file path must be passed as a string or character vector.
+  Authentication method to use is determined using the AuthMethod field of the
+  JSON configuration file.
+ 
+  Supported authentication methods are:
+    storageSharedKey (Azure Data Lake Storage Gen2 only)
+    connectionString (Azure Data Lake Storage Gen2 only)
+    environment
+    defaultAzure
+    clientSecret
+    interactiveBrowser
+    deviceCode
+    sharedTokenCache
+    managedIdentity
+    azurecli
+ 
+  The resulting credential object can then be used by the corresponding client
+  builder.
+ 
+  The function has one optional Name-Value input pair:
+ 
+    'DeviceCodeCallback', @myFunctionHandle
+ 
+  This option is only valid when working with the DeviceCode method and it
+  allows specifying a custom function for displaying the Device Code login
+  instructions.
+
+
+
+
+

configureProxyOptions

+
CONFIGUREPROXYOPTIONS Configured Java proxy options object
+  A com.azure.core.http.ProxyOptions Java object is returned if a proxy is
+  configured otherwise an empty double is returned corresponding to a null.
+
+
+
+
+

createKeyVaultClient

+
CREATEKEYVAULTCLIENT Convenience function for creating KeyClient and
+  SecretClient
+ 
+    client = createKeyVaultClient('Type','Key') creates a KeyClient with
+    default options.
+ 
+    client = createKeyVaultClient('Type','Secret') creates SecretClient with
+    default options.
+ 
+  By default createKeyVaultClient reads Credential information and the
+  Vault Name from a configuration file named 'keyvaultsettings.json'. The
+  function automatically searches for this file on the MATLABPATH. It is
+  possible to specify a different filename using 'ConfigurationFile'. It is
+  also possible to provide 'Credentials' and 'VaultName' as inputs to the
+  function directly in case which no configuration file may be needed. See
+  the Name, Value pairs below for more details.
+ 
+  Additional Name, Value pairs can be supplied to configure non-default
+  options:
+ 
+    'ConfigurationFile', explicitly specify which configuration file to
+        use. This file is used for configuring Credentials (when not
+        supplied as input) and/or Account Name (when not supplied as input).
+ 
+        Default Value: 'keyvaultsettings.json'
+ 
+    'Credentials', explicitly specify credentials to use. This for example
+        allows building multiple clients based on the same credentials
+        without having to go through (interactive) authentication again. If
+        not specified, createKeyVaultClient uses configureCredentials with
+        'ConfigurationFile' as input to first configure credentials before
+        building the client.
+ 
+        Hint: configureCredentials can be used to build valid Credentials.
+ 
+        Example:
+            credentials = configureCredentials('myCredentials.json');
+            client1 = createKeyVaultClient('Credentials',credentials,'Type','Key')
+            client2 = createKeyVaultClient('Credentials',credentials,'Type','Secret')
+ 
+    'VaultName', explicitly specify the Vault name for the client. If not
+        specified createKeyVaultClient uses loadConfigurationSettings to
+        load configuration options from 'ConfigurationFile'. This file must
+        then contain a "VaultName" setting.
+ 
+    See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS
+
+
+
+
+

createStorageClient

+
CREATESTORAGECLIENT Convenience function for creating BlobServiceClient,
+  BlobContainerClient, BlobClient, QueueServiceClient, QueueClient,
+  DataLakeFileSystemClient, DataLakeDirectoryClient and DataLakeFileClient.
+ 
+    client = createStorageClient() creates a BlobServiceClient with default
+    options.
+ 
+    client = createStorageClient('ContainerName','myContainer')
+    creates BlobContainerClient with default options.
+ 
+    client = createStorageClient('ContainerName','myContainer',...
+                'BlobName','myBlob') creates a BlobClient with default options.
+ 
+    client = createStorageClient('Type','QueueService') creates a
+    QueueServiceClient with default options.
+ 
+    client = createStorageClient('QueueName','myQueue') creates a
+    QueueClient with default options.
+ 
+    client = createStorageClient('FileSystemName','myFileSystem') creates a
+    DataLakeFileSystemClient with default options.
+ 
+    client = createStorageClient('FileSystemName','myFileSystem',...
+                'DirectoryName','my/dir') creates a DataLakeDirectoryClient
+    with default options.
+ 
+    client = createStorageClient('FileSystemName','myFileSystem',...
+                'FileName','my/dir/file') creates a DataLakeFileClient with 
+    default options.
+ 
+  By default createStorageClient reads Credential information and the
+  Account Name (used to build the Client endpoint) from a configuration
+  file named 'storagesettings.json'. The function automatically searches for
+  this file on the MATLABPATH. It is possible to specify a different
+  filename using 'ConfigurationFile'. It is also possible to provide
+  'Credentials' or 'SASToken' and 'AccountName' as inputs to the function
+  directly in case which no configuration file may be needed. See the Name,
+  Value pairs below for more details. An endpoint can be set if required
+  e.g. if it does not conform to the default https://<AccountName>.<TYPE>.core.windows.net
+  pattern, see below for EndPoint details.
+ 
+  Additional Name, Value pairs can be supplied to configure non-default
+  options:
+ 
+    'Type', explicitly specify the type of client to create. Required for
+        creating QueueServiceClient. In all other cases the type of client
+        is derived from whether 'ContainerName', 'BlobName', 'QueueName', 
+        'FileSystemName', 'DirectoryName', and/or 'FileName' are provided. 
+        With none of these configured a BlobServiceClient is created. If 
+        only BlobContainer is specified a BlobContainerClient is created,
+        if both BlobContainer and BlobName are specified a BlobClient is
+        created. If QueueName is specified a QueueClient is created. If 
+        only FileSystemName is specified a DataLakeFileSystemClient is
+        created, if DirectoryName is specified as well, a 
+        DataLakeDirectoryClient is created, or if FileName is specified a 
+        DataLakeFileClient is created.
+            
+        Possible Values: 'BlobService', 'BlobContainer', 'Blob',
+            'QueueService', 'QueueClient', 'DataLakeDirectory',
+            'DataLakeFile', or 'DataLakeFileSystem'.
+ 
+    'ConfigurationFile', explicitly specify which configuration file to
+        use. This file is used for configuring Credentials (when not 
+        supplied as input) and/or Account Name (when not supplied as input).
+ 
+        Default Value: 'storagesettings.json'
+ 
+    'Credentials', explicitly specify credentials to use. This for example
+        allows building multiple clients based on the same credentials
+        without having to go through (interactive) authentication again. If
+        neither this option nor 'SASToken' is specified, 
+        createStorageClient uses configureCredentials with 
+        'ConfigurationFile' as input to first configure credentials before
+        building the client. 
+  
+        Hint: configureCredentials can be used to build valid Credentials.
+ 
+        Example:
+            credentials = configureCredentials('myCredentials.json');
+            client1 = createStorageClient('Credentials',credentials,'ContainerName','container1')
+            client2 = createStorageClient('Credentials',credentials,'ContainerName','container2')
+ 
+    'SASToken', explicitly specify a SAS Token to use for authentication
+        rather than reading authentication details from a configuration
+        file or a credentials object passed in through the 'Credentials`
+        option. If neither this option nor 'Credentials' are specified,
+        createStorageClient uses configureCredentials with
+        'ConfigurationFile' as input to first configure credentials before
+        building the client. 
+    
+    'AccountName', explicitly specify the AccountName used to configure the
+        account and potentially the endpoint for the client.
+        If not specified createStorageClient uses loadConfigurationSettings
+        to load configuration options from 'ConfigurationFile'.
+        This file must then contain a "AccountName" setting.
+ 
+    'EndPoint', enables endpoint naming patterns other than:
+        https://<AccountName>.<TYPE>.core.windows.net
+        by explicitly specify the EndPoint used to configure the client.
+        If 'EndPoint' is not specified as an argument and an 'AccountName' is
+        provided then the 'AccountName' will be used to create a default endpoint.
+        If neither an 'EndPoint' or 'AccountName' argument is provided the
+        corresponding configuration file fields will be used with priority given
+        to "EndPoint".
+ 
+    See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS
+
+
+
+
+

initialize

+
INITIALIZE Configure logger and version test at Client builder entry points
+  This function need only be invoked once per session when using the package.
+  It configures logging and proxy settings.
+  Note the logger is a singleton so prefixes may not correspond if multiple
+  packages are using it simultaneously. In this scenario a generic subprefix
+  may be helpful.
+ 
+  Example
+     % Taken from createClient in the Key Vault interface
+     initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault');
+ 
+  See: MATLAB/app/functions/Logger.m for more details.
+
+    Other uses of initialize
+
+       matlab.net.http.io.ContentConsumer/initialize
+       matlab.net.http.io.ImageConsumer/initialize
+       matlab.net.http.io.JSONConsumer/initialize
+       matlab.net.http.io.MultipartConsumer/initialize
+       matlab.net.http.io.StringConsumer/initialize
+       myDeployedModule/initialize
+       SimTimeseries/initialize
+       simulink.Simulation/initialize
+
+
+
+
+

loadConfigurationSettings

+
LOADCONFIGURATIONSETTINGS Method to read a JSON configuration settings from a file
+  The file name must be as a specified argument.
+  JSON values must be compatible with MATLAB JSON conversion rules.
+  See jsondecode() help for details. A MATLAB struct is returned.
+  Field names are case sensitive.
+
+
+

Microsoft Azure Data Explorer, Azure Data Lake Storage & Azure Key Vault are trademarks of the Microsoft group of companies.

+
+

Copyright 2022-2024 The MathWorks® Inc.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Authentication.html b/Documentation/html/Authentication.html new file mode 100644 index 0000000..4b0feee --- /dev/null +++ b/Documentation/html/Authentication.html @@ -0,0 +1,657 @@ + + + + + + + Authentication — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Authentication

+

Azure® supports a variety of authentication methods. These can be invoked +specifically or as a series of failover attempts in a so-called provider-chain.

+

Azure Data Explorer authentication support includes some of the features described +below, it is described in more detail in ADXAuthentication.md.

+

When working with high level functions like createStorageClient or +createKeyVaultClient, these will automatically perform the authentication and +then use these credentials to automatically create the service specific clients. +The authentication details are read from JSON Configuration files as also +discussed in Configuration.md. Each service has its own +filename for its default JSON configuration file. Most functions also accept an +alternative configuration filename as input. The configuration files may contain +service specific non-authentication related options as well.

+

See the service specific documentation to learn more about the default filename +for each service and how to provide an alternative filename if desired.

+

See the sections below to learn more about which settings need to be added in +the JSON configuration files for the various authentication methods.

+

Alternatively, if not using the high level functions for creating service +specific clients and using the Client Builders instead, the Credential objects +can still first be build using the configureCredentials function (which is in +fact also used internally by the higher level functions). This function must be +called with a specific configuration filename as input, e.g.:

+
credentials = configureCredentials('myCredentialConfiguration.json')
+
+
+

Again, see the sections below on what options need to be configured in the file +for the different authentication methods.

+

Lastly, it is also possible to build Credential objects on the lowest level with +the help of Credential Builders; see the APIReference for +more details on these classes. This approach does not require any configuration +files.

+

The following authentication approaches are supported:

+
    +
  1. Azure CLI

  2. +
  3. Managed Identity

  4. +
  5. Client Secret

  6. +
  7. Environment Variable

  8. +
  9. Shared Token Cache

  10. +
  11. Interactive Browser

  12. +
  13. Device Code

  14. +
  15. Default Azure

  16. +
  17. Storage Shared Key

  18. +
  19. Connection String

  20. +
  21. Chained Token

  22. +
+
+

Azure CLI

+

This approach uses credentials used to previously authenticate to the Azure CLI +tool when the az login command is used. The Azure CLI login process +supports a number of authentication processes many of which are common to this +package.

+
+

Sample myServiceSpecificSettings.json

+
{
+    "AuthMethod": "AzureCli"
+}
+
+
+

For more information on the CLI see: Azure CLI +site

+
+
+
+

Managed Identity

+

Managed identities provide an identity for the Azure resource in Azure Active +Directory (Azure AD) and use it to obtain Azure AD tokens. Thus identities do +not have to be directly managed by the developer or end user. This can be +particularly useful in a deployed scenario as credentials should not be embedded +in a compiled MATLAB® application or CTF file, rather the application can in +effect derive its credentials by virtue of the machine hosting it in Azure.

+
+

Managed Identity myServiceSpecificSettings.json

+
{
+    "AuthMethod": "ManagedIdentity",
+    "ClientId" : "811<REDACTED>8ee",
+}
+
+
+

In the case of a system assigned managed identity the Azure portal refers to the +ClientId value as the “Application ID”. In the case of a user assigned managed +identity the ClientId value is referred to as a “Client ID” in the Azure portal.

+

An identity’s Resource ID can be provided as an alternative to the Client ID. +Both should not be provided. The corresponding configuration file setting field +is ResourceId.

+
+
+
+

Client Secret

+

A Client Secret credential is an Azure AD credential that acquires a token with +a client secret. The secret can be provided in the form as a string specified as +ClientSecret or can be a certificate referred to by PemCertificate.

+
+

Client Secret myServiceSpecificSettings.json

+
{
+    "AuthMethod": "ClientSecret",
+    "TenantId" : "99d<REDACTED>1e6",
+    "ClientId" : "811<REDACTED>8ee",
+    "ClientSecret": "i6Q<REDACTED>p72", //Either 
+    "PemCertificate": "c:/path/to/clientCert.pem", //Or
+    "AuthorityHost": "https://myauthority.com/" //Optional
+}
+
+
+
+
+
+

Environment Variable

+

With Environment Variable based credentials the variables must be set in the +process used to start MATLAB® such that the variables apply to the JVM which is +configured when MATLAB starts and is not affected by MATLAB setenv calls. +The following combinations of credentials are accepted:

+
    +
  1. AZURE_CLIENT_ID, AZURE_CLIENT_SECRET & AZURE_TENANT_ID

  2. +
  3. AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH & AZURE_TENANT_ID

  4. +
  5. AZURE_CLIENT_ID, AZURE_USERNAME & AZURE_PASSWORD

  6. +
+

Environment Variable credentials can often be used in CI/CD based processes. +Additional note the support for a certificate file path.

+
+

Environment Variable myServiceSpecificSettings.json

+
{
+    "AuthMethod": "Environment",
+    "AuthorityHost": "https://myauthority.com/" //Optional
+}
+
+
+
+
+
+

Shared Token Cache

+

With SharedTokenCacheCredential, credentials are read from a cache saved on +disk (Windows®) or GNOME keyring (Linux). It is possible to work with Shared +Token Cache directly, in which case the tokens need to already exist in the +cache. However, in more practical situations it is recommended to use Shared +Token Cache in combination with an other authentication method like Interactive +Browser or Device Code.

+

Interactive Browser and Device Code can be configured in such a way that they +will store the tokens which they obtain interactively in the cache. +configureCredentials will then also configure these workflows to first try to +read the token from the cache, such that if the token already exists in the +cache, these methods do not have to go through their interactive flow anymore +and they can complete without user interaction.

+

Specifying a cache Name is optional, TokenCachePersistenceOptions can be +provided as empty object. In this case the default name “msal” is used on +Windows and “MSALCache” on Linux.

+
+

Shared Token Cache myServiceSpecificSettings.json

+
{
+    "AuthMethod": "SharedTokenCache",
+    "TenantId" : "99d<REDACTED>1e6",
+    "ClientId" : "811<REDACTED>8ee",
+    "TokenCachePersistenceOptions" : {
+        "Name": "myMATLABCache" //Optional
+    }  
+}
+
+
+
+
+
+

Interactive Browser

+

When Interactive Browser credentials are used an Azure Active Directory +credential acquires a token for an Azure AD application by prompting the login +in the default browser. When authenticated, the oauth2 flow will notify the +credential of the authentication code through the reply URL. The application to +authenticate to must have delegated user login permissions and +havehttp://localhost:port listed as a valid Redirect URI for the Azure +App.

+
+

TokenCachePersistenceOptions (Interactive Browser)

+

Interactive Browser can optionally be configured with +TokenCachePersistenceOptions. When these are configured, +configureCredentials will actually build and return a ChainedTokenCredential +object instead of an InteractiveBrowserCredential. The first option in this +chain will be a SharedTokenCacheCredential and the second option an +InteractiveBrowserCredential configured to persist the tokens it obtains in +the same cache.

+

When using this the very first time, the token will not exist in the cache and +the Interactive Browser workflow will be executed interactively. This will then +store the obtained token in the cache. If the same authentication method is then +used again later, the token can be read from the cache and the authentication +flow will complete without needing any action from the end-user.

+
+
+

Interactive Browser myServiceSpecificSettings.json

+
{
+    "AuthMethod": "InteractiveBrowser",
+    "TenantId" : "99d<REDACTED>1e6",
+    "ClientId" : "811<REDACTED>8ee",    
+    "RedirectUrl": "http://localhost:8765",
+    "AuthorityHost": "https://myauthority.com/", //Optional
+    "TokenCachePersistenceOptions" : { //Optional
+        "Name": "myMATLABCache"        //Optional
+    }  
+}
+
+
+
+
+
+

Device Code

+

DeviceCodeCredential enables authentication to Azure AD using a device code +that the user can enter into +https://microsoft.com/devicelogin.

+

Note that in general the actual authentication provided through the credential +objects is only executed when the client (KeyClient, BlobClient, etc.) requires +it (typically on the first operation you perform using the client). In general +the Azure Java SDK follows this same workflow when working with Device Code +Credentials. However, in MATLAB specifically, MATLAB will not be able to +display the device code while other client code is already running, so MATLAB +requires the Device Code authentication to be explicitly performed before +passing the credentials to a client. This also means MATLAB cannot rely on the +client to automatically request the correct scope by itself and therefore it is +required to specify the correct scopes in the configuration file. Scopes are +entered as an array of strings.

+
+

Scopes

+

Azure DataLake Storage Gen2 typically requires the +https://storage.azure.com/.default scope.

+

Key Vault typically requires the https://vault.azure.net/.default scope.

+
+

NOTE: it is not possible to request access to multiple different +resources (services) in one authentication call. This is a limitation from the +Azure end and not specific to this package.

+

I.e. it is not possible to request both +https://storage.azure.com/.default and https://vault.azure.net/.default +Scopes simultaneously to obtain a single Credential object which is then +usable with both Storage clients as well as Key Vault clients. Separate +Credential objects will have to be obtained for the different Scopes and then +passed to the different Clients.

+
+
+
+

Building and authenticating

+

configureCredentials will automatically build the DeviceCodeCredential +object and authenticate it for the scopes configured in the settings file. The +DeviceCodeCredential object which is returned will be “pre-authenticated” in +that sense.

+

By default the instructions for the end-user on how to complete the device code +authentication flow are printed to the Command Window. An optional +'DeviceCodeCallback' Name-Value input pair can be passed to +configureCredentials to specify a custom callback function for displaying the +device code instructions:

+
credentials = configureCredentials('settings_DeviceCode.json',,...
+    'DeviceCodeCallback',@myExampleCallbackFunction);
+
+
+

This callback will then be called during the authentication flow with an +azure.identity.DeviceCodeInfo object as input. Use the information provided in +this object to display instructions to the end user on how to complete the +authentication flow. Or for example use this to automatically copy the code to +clipboard and open a browser:

+
function myExampleCallbackFunction(deviceCodeInfo)
+    % Simply still print to instructions to the Command Window
+    disp(deviceCodeInfo.getMessage)
+    % But also copy the code to the clipboard
+    clipboard("copy",deviceCodeInfo.getUserCode);
+    % And open a browser
+    web(deviceCodeInfo.getVerificationUrl);
+
+
+
+
+

TokenCachePersistenceOptions (Device Code)

+

Device Code can optionally be configured with TokenCachePersistenceOptions. +When these are configured, configureCredentials will actually build and return +a SharedTokenCacheCredential object instead of a DeviceCodeCredential. The +internal workflow is as follows then:

+
    +
  1. A SharedTokenCacheCredential is built and MATLAB uses it to try to obtain a +valid token for the specified scope from the cache. If this succeeds the +SharedTokenCacheCredential is returned immediately without any end-user +interaction.

  2. +
  3. If no token could be obtained from the cache, a DeviceCodeCredential is +built and configured to store obtained tokens in the cache and it is then +authenticated for the requested scope. This will require the end-user to +perform the authentication interactively. Once this interactive flow has +completed, the tokens which were obtained during this, will have been stored +in the cache, so it sufficient now for configureCredentials to return the +SharedTokenCacheCredential and there is no need to return the +DeviceCodeCredential.

  4. +
+
+
+

Device Code myServiceSpecificSettings.json

+
{
+    "AuthMethod": "DeviceCode",
+    "TenantId" : "99d<REDACTED>1e6",
+    "ClientId" : "811<REDACTED>8ee",    
+    "Scopes": [
+        "https://storage.azure.com/.default"
+    ],
+    "AuthorityHost": "https://myauthority.com/", //Optional
+    "TokenCachePersistenceOptions" : { //Optional
+        "Name": "myMATLABCache"        //Optional
+    }
+}
+
+
+
+
+
+

Default Azure

+

A DefaultAzureProviderCredential attempts to create a credential using +environment variables or the shared token cache. It tries to create a valid +credential in the following order:

+
    +
  1. EnvironmentCredential

  2. +
  3. ManagedIdentityCredential

  4. +
  5. SharedTokenCacheCredential

  6. +
  7. IntelliJCredential

  8. +
  9. VisualStudioCodeCredential

  10. +
  11. AzureCliCredential

  12. +
  13. Fails if none of the credentials above could be created.

  14. +
+

The chained token provider allows for customization of this process (see below). +Note in the following JSON config file the ManagedIdentityClientId, TenantId and +AuthorityHost are optional fields depending on which means of authentication is +expected to be used.

+
+

Default Azure myServiceSpecificSettings.json

+
{
+    "AuthMethod": "DefaultAzure",
+    "TenantId" : "99d<REDACTED>1e6", //Optional
+    "ManagedIdentityClientId" : "811<REDACTED>8ee", //Optional
+    "AuthorityHost": "https://myauthority.com/" //Optional
+}
+
+
+
+
+
+

Storage Shared Key

+

This approach is only supported/relevant when working with Azure Storage +workflows and can for example not be used when working with Azure Key Vault +workflows.

+

This approach creates a StorageSharedKeyCredential containing an account’s +name and its primary or secondary accountKey. The accountName is the +account name associated with the request and the accountKey is the account +access key used to authenticate the request.

+

To obtain the primary or secondary key:

+
    +
  1. Sign in to the Azure portal.

  2. +
  3. Locate the storage account.

  4. +
  5. In the account’s settings section, select “Access keys”, showing the access +keys and the connection string for each key.

  6. +
  7. Select the “Key” string value for key1 or key2 and copy the value.

  8. +
+
+

Storage Shared Key myServiceSpecificSettings.json

+
{
+    "AuthMethod": "StorageSharedKey",
+    "AccountKey" : "lrd<REDACTED>g==",
+    "AccountName" : "a<REDACTED>t"
+}
+
+
+

Connection String is a form of StorageSharedKeyCredential where the +credential is simply the connection string.

+
+
+
+

Connection String

+

This approach is only supported/relevant when working with Azure Storage +workflows and can for example not be used when working with Azure Key Vault +workflows.

+

A connection string contains all the relevant connection properties, like the +account name and authentication information in one big string. The +authentication information can be in the form of a Storage Shared Key or a SAS +signature.

+

To obtain a connection string based on Storage Shared Key:

+
    +
  1. Sign in to the Azure portal.

  2. +
  3. Locate the storage account.

  4. +
  5. In the account’s settings section, select “Access keys”, showing the access +keys and the connection string for each key.

  6. +
  7. Select the “Connection string” value for key1 or key2 and copy the value.

  8. +
+

To obtain a connection string based on a SAS signature:

+
    +
  1. Sign in to the Azure portal

  2. +
  3. Locate the storage account

  4. +
  5. In the account’s settings section, select “Shared access signature”.

  6. +
  7. Configure the permissions and access properties as required/desired and click +“Generate SAS and connection string”.

  8. +
  9. Select the “Connection string” value and copy the value.

  10. +
+
+

Connection String myServiceSpecificSettings.json

+
{
+    "AuthMethod": "ConnectionString",
+    "ConnectionString": "DefaultEndpointsProtocol=https;<REDACTED CONNECTION STRING>g==;EndpointSuffix=core.windows.net"
+}
+
+
+

Alternatively the connection string can be passed as an environment value as +follows: On Windows using cmd:

+
setx AZURE_STORAGE_CONNECTION_STRING "<myConnectionString>"
+
+
+

Or on Linux/macOS using bash:

+
export AZURE_STORAGE_CONNECTION_STRING="<myConnectionString>"
+
+
+
+
+
+

Chained Token

+

Using a Chained Token provider allows a list of token based credential providers +to be built such that the authentication process will fall through the providers +until successful or the list is exhausted. Connection String and Storage Shared +Key approaches are not token based. Credentials are built in the usual way but +rather than being used directly they are added to the +chainedTokenCredentialBuilder in descending order of preference. This +builder is then built and the result provides the client’s credentials.

+
chainedTokenCredentialBuilder = chainedTokenCredentialBuilder.addLast(clientSecretCredentials);
+chainedTokenCredentials = chainedTokenCredentialBuilder.build();
+serviceClientBuilder = serviceClientBuilder.credential(chainedTokenCredentials);
+
+
+

In this case multiple settings files are used to build the individual +credentials by passing a specific path e.g.:

+
clientSecretCredentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ClientSecret.json'));
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Blob.html b/Documentation/html/Blob.html new file mode 100644 index 0000000..5973acf --- /dev/null +++ b/Documentation/html/Blob.html @@ -0,0 +1,739 @@ + + + + + + + Blob Storage — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Blob Storage

+

Blob storage is the most common use case for Azure® Data Lake Storage Gen2. This +package provides a low-level interface to blob storage and provides capabilities +not available in shipping MATLAB®. This package supersedes a previously published +blob storage low-level interface +https://github.com/mathworks-ref-arch/matlab-azure-blob. +Specifically this interface targets Gen2 storage APIs and the Azure v12 SDK +rather than the previous generation of APIs and the v8 SDK. While the older +interface referenced above provides some forward compatibility with Gen2 it is +strongly recommended that this interface be used when working with Gen2 blob +storage. While conceptually quite similar the APIs are not backwardly compatible +as a consequence of significant changes in the underlying Azure APIs.

+
+

Blob Clients

+

The concept of a Client is central to how blob storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy:

+
    +
  1. BlobServiceClient - This highest level client addresses the level of +blob service itself.

  2. +
  3. BlobContainerClient - This client primarily supports operations at the +container level.

  4. +
  5. BlobClient - The lowest level client supports operations at the blob +level.

  6. +
+

And there is a fourth BlobLeaseClient which can be used in conjunction with +BlobContainerClient or BlobClient for managing leases on blobs and +containers.

+

Client objects are created and configured using corresponding Builder objects. +There is overlap in functionality between the various clients and there may +often be more than one way to accomplish a given operation e.g. creating a +container.

+

Detailed information on the underlying client APIs can be found here: Blob +Client +SDK. +This interface exposes a subset of the available functionality to cover common +use cases in an extensible way.

+

A higher-level function createStorageClient() is provided to help build the +various clients, see: DataLakeStorageGen2.md

+
+
+

Blob Service Client

+

A BlobServiceClient can be created using createStorageClient as follows:

+
serviceClient = createStorageClient();
+
+
+

or build on a lower level using BlobServiceClientBuilder:

+
% Create the client's builder
+builder = azure.storage.blob.BlobServiceClientBuilder();
+
+% configureCredentials is a convenience method that simplifies creating a credentials
+% argument for the client's builder. In this case a Connection String is used to
+% authenticate. Other authentication methods may required different build steps.
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+builder = builder.connectionString(credentials);
+
+% Use a default Netty HTTP client and proxy settings as per MATLAB's proxy preferences
+builder = builder.httpClient();
+
+% The service client can now be built and then used
+serviceClient = builder.buildClient();
+
+
+
+

Common Service Client operations

+

For a full list of supported service client methods consult the API +documentation or call methods() on the client object or see the +APIReference.md file.

+
%% Listing containers
+
+% Returns an array of BlobContainerItem objects that describe the containers in
+% the current account
+results = serviceClient.listBlobContainers();
+% Assuming non-empty results show the name of the first container
+results(1).getName()
+
+
+
%% Create & Delete a container
+% The service client creates a container with a given name an returns
+% a corresponding BlobContainerObject
+containerClient = serviceClient.createBlobContainer(containerName);
+
+% We can use that client to test the container's existence
+tf = containerClient.exists();
+
+% The service client can the delete the container
+serviceClient.deleteBlobContainer(containerName);
+
+% Or alternatively the BlobContainerClient can do the deletion
+containerClient.deleteContainer();
+
+
+
+
+
+

Shared Access Signature Generation

+

In Azure, Shared Access Signatures or SASs are an important means of granting +access to resources via URLs and strings that are easily shared. There are +various types of SASs, see:

+

https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature

+

Which type of SAS you can generate depends on how the client is authenticated:

+
    +
  • When authenticated with Storage Shared +Key you can generate account-level +and service-level SAS using BlobServiceClient.generateAccountSas and +BlobClient.generateSas.

  • +
  • When authenticated with Connection +String (which is basically “using a +SAS”) or with a SAS +directly you cannot +generate any SAS at all but the SAS which you already have may simply be +reusable.

  • +
  • When authenticated using any other method (in which the client is essentially +authenticated as a specific user or service principal) you can generate user +delegation SAS.

  • +
+

The following example shows how to generate a service-level SAS for a +container:

+
% Create a service client
+builder = azure.storage.blob.BlobServiceClientBuilder();
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_StorageSharedKey.json'));
+builder = builder.credential(credentials);
+builder = builder.httpClient();
+endpoint = ['https://', credentials.getAccountName(), '.blob.core.windows.net'];
+builder = builder.endpoint(endpoint);
+serviceClient = builder.buildClient();
+
+% Define the access permissions to associate with the signature
+permissions = azure.storage.common.sas.AccountSasPermission();
+permissions = permissions.setListPermission(true);
+permissions = permissions.setReadPermission(true);
+
+% Define the resource type as a container
+resourceTypes = azure.storage.common.sas.AccountSasResourceType();
+resourceTypes = resourceTypes.setContainer(true);
+
+% Define the Azure data services to which the SAS applies
+services = azure.storage.common.sas.AccountSasService();
+services = services.setBlobAccess(true);
+services = services.setFileAccess(true);
+
+% Set the expiry time of the SAS for 24 hours from now, note a timezone is required
+expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1);
+
+% Create a AccountSasSignatureValues to combine the above values
+sasValues = azure.storage.common.sas.AccountSasSignatureValues(expiryTime, permissions, services, resourceTypes);
+
+% Create the SAS
+% Note the service client must have been authenticated via a StorageSharedKeyCredential
+% to allow it to generate a SAS
+sas = serviceClient.generateAccountSas(sasValues);
+
+
+

And the following example shows how to generate a user delegation SAS for a +specific Blob:

+
% Create a BlobClient using the convenience function (it is also possible
+% to use the Builders). As an example a configuration for
+% InteractiveBrowser authentication is used (any method which authenticates
+% as user or service principal should do though).
+blobClient = createStorageClient('ContainerName','my-container',...
+    'BlobName','my-blob.txt',...
+    'ConfigurationFile','myInteractiveBrowserSetting.json');
+
+%% First obtain the UserDelegationKey using BlobServiceClient
+% Obtain a service client for the given blob and its container
+serviceClient = blobClient.getContainerClient.getServiceClient;
+% Obtain a UserDelegationKey which is valid for, as an example, 1 hour
+userKey = serviceClient.getUserDelegationKey(datetime('now'),...
+    datetime('now')+hours(1));
+
+%% Configure the desired permissions for the SAS
+% Start with empty BlobSasPermission
+permissions = azure.storage.blob.sas.BlobSasPermission();
+% As an example, add read permissions
+permissions = permissions.setReadPermission(true);
+% Create the SAS signature, again for a validity of 1 hour
+sasValues = azure.storage.blob.sas.BlobServiceSasSignatureValues(...
+    datetime('now')+hours(1), permissions);
+
+%% Generate the full signed SAS
+sas = blobClient.generateUserDelegationSas(sasValues,userKey);
+
+%% Do something with the SAS
+% As an example now generate a full URL with which the blob can be accessed
+% and which can be shared with others
+URL = [blobClient.getBlobUrl '?' sas];
+
+%% Or which can for example be used with copyFromUrl
+% Create a blob client for a new blob
+newBlobClient = createStorageClient('ContainerName','my-container',...
+    'BlobName','copy-of-my-blob.txt',...
+    'ConfigurationFile','myInteractiveBrowserSetting.json');
+% And actually create it by copying the other blob
+newBlobClient.copyFromUrl(URL);
+
+
+
+
+

Blob Container Client

+

A BlobContainerClient appears very similar to a service client both in +creation and operation.

+
% Create using createStorageClient
+containerClient = createStorageClient('ContainerName','mycontainername');
+
+
+

or:

+
% Create the Client using its builder
+builder = azure.storage.blob.BlobContainerClientBuilder();
+
+% Again using connection string based authentication
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+
+builder = builder.connectionString(credentials);
+builder = builder.httpClient();
+builder = builder.containerName("mycontainername");
+containerClient = builder.buildClient();
+
+
+
+

Common Container Client operations

+
+

List blobs in a container

+
% With the client in place it can be used to list the blobs within its corresponding
+% container
+
+% List the blobs in the container
+results = containerClient.listBlobs;
+% Display the name of the 1st blob assuming the container is not empty
+results(1).getName()
+
+
+

See also Advanced listing support below.

+
+
+

Create a BlobClient

+
% Get a blob name and create a client using it
+results = containerClient.listBlobs;
+% Assume there is a blob with name:
+results(1).getName();
+
+% Create the corresponding BlobClient
+blobClient = client.getBlobClient(results(1).getName());
+
+
+
+
+
+
+

Blob Client

+

The BlobClient appears very similar to the other clients in creation and +operation.

+
% Create using createStorageClient
+containerClient = createStorageClient('ContainerName','mycontainername',...
+   'BlobName','myblobname.txt');
+
+
+

or:

+
% Create the client builder
+builder = azure.storage.blob.BlobClientBuilder();
+
+% Configure the builder
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+builder = builder.connectionString(credentials);
+builder = builder.httpClient();
+builder = builder.containerName("mycontainername");
+builder = builder.blobName("myblobname.txt");
+
+% Create the client
+blobClient = builder.buildClient();
+
+
+
+

Common Blob Client operations

+
+

Test if a blob exists

+
tf = blobClient.exists();
+
+
+
+
+

Get a URL for a blob

+
urlStr = blobClient.getBlobUrl();
+
+
+
+
+

Create a client using a SAS for authentication

+
builder = azure.storage.blob.BlobClientBuilder();
+builder = builder.sasToken(sas);
+builder = builder.httpClient();
+builder = builder.endpoint(endpoint);
+builder = builder.containerName("mycontaintername");
+builder = builder.blobName("myblobname.txt");
+blobClient = builder.buildClient();
+
+
+
+
+

Upload & download a blob

+
uploadFile = 'C:\mydir\myfile.mat';
+[~, fileName, ext] = fileparts(uploadFile);
+% The blob name and filename need not match but they typically do
+blobName = [fileName, ext];
+builder = azure.storage.blob.BlobClientBuilder();
+builder = builder.connectionString(credentials);
+builder = builder.httpClient();
+builder = builder.containerName('mycontainername');
+builder = builder.blobName(blobName);
+blobClient = builder.buildClient();
+
+% Upload the file to the blob overwriting any existing blob of that name
+blobClient.uploadFromFile(uploadFile, 'overwrite', true);
+
+% Download the blob to a temporary location
+downloadFile = [tempname,'.mat'];
+blobClient.downloadToFile(downloadFile, 'overwrite', true);
+
+
+
+
+

Copy a blob using a SAS

+
% Create a client for the source blob
+builder = azure.storage.blob.BlobClientBuilder();
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_StorageSharedKey.json'));
+builder = builder.credential(credentials);
+builder = builder.httpClient();
+builder = builder.containerName("sourcecontainer");
+builder = builder.blobName("sourceblob.txt");
+srcClient = builder.buildClient();
+
+% Create a service-level read only SAS valid for 24 hours
+permissions = azure.storage.blob.sas.BlobSasPermission();
+permissions = permissions.setReadPermission(true);
+expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1);
+sasValues = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions);
+srcSas = srcClient.generateSas(sasValues);
+
+% Build the full SAS URL by appending the SAS to the blob URL, note the '?'
+srcUrl = srcClient.getBlobUrl();
+srcStr = append(srcUrl, '?', srcSas);
+
+% Create a container & respective client for the destination blob
+builder = azure.storage.blob.BlobContainerClientBuilder();
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+builder = builder.connectionString(credentials);
+builder = builder.httpClient();
+builder = builder.containerName("destinationcontainer");
+containerClient = builder.buildClient();
+containerClient.create();
+destClient = containerClient.getBlobClient('destinationblob.txt');
+
+% Finally copy the source blob to the destination
+destClient.copyFromUrl(srcStr);
+
+
+
+
+
+
+

Blob Lease Client

+

BlobLeaseClient is created using BlobLeaseClientBuilder which can then build +the client based on an existing BlobClient or BlobContainerClient. +Optionally the BlobLeaseClient can be configured with a specific leaseId (e.g. +in order to then be able to release a lease previously created outside of MATLAB +or for which the BlobLeaseClient was cleared).

+
% Create BlobLeaseClient based on an existing BlobClient 
+% 'existingBlobClient' (created using the instructions above)
+builder = azure.storage.blob.specialized.BlobLeaseClientBuilder;
+builder = builder.blobClient(existingBlobClient);
+% Optionally specify a specific leaseId
+builder = builder.leaseId('60233c25-dc52-4b3a-a874-dc641b4877a9');
+
+% Build the BlobLeaseClient
+leaseClient = builder.buildClient();
+
+
+
% Create BlobLeaseClient based on an existing BlobContainerClient 
+% 'existingContainerClient' (created using the instructions above)
+builder = azure.storage.blob.specialized.BlobLeaseClientBuilder;
+builder = builder.containerClient(existingContainerClient);
+% Optionally specify a specific leaseId
+builder = builder.leaseId('60233c25-dc52-4b3a-a874-dc641b4877a9');
+
+% Build the BlobLeaseClient
+leaseClient = builder.buildClient();
+
+
+
+

Acquiring, renewing, changing, releasing and breaking leases

+

The interface supports all Lease Blob operations as specified in the Azure +documentation.

+
% Acquire a lease for 30 seconds
+leaseId = leaseClient.acquireLease(30);
+% Acquire a lease which never expires
+leaseId = leaseClient.acquireLease(-1);
+% Renew an active lease
+leaseClient.renewLease();
+% Change a lease to a different leaseId
+leaseClient.changeLease('195aaa29-d604-469b-93a4-80af769f4b03')
+% Release an active lease
+leaseClient.releaseLease();
+% Break a lease
+leaseClient.breakLease();
+
+
+
+
+

Interacting with a Blob or Blob Container which has a lease on it

+

When a Blob has a lease on it, certain interactions like deleting it or +overwriting it with a newly uploaded or copied file are only possible when that +operation is performed with the correct leaseId. The leaseId can be provided as +Name-Value input pair to the deleteBlob, uploadFromFile and copyFromFile +methods of BlobClient and the deleteContainer method of +BlobContainerClient. So a full workflow could become:

+
% Build a BlobClient
+blobClient = createStorageClient('ContainerName','mycontainer','BlobName','myblob');
+
+% Build a BlobLeaseClient based on this BlobClient
+leaseClientBuilder = azure.storage.blob.specialized.BlobLeaseClientBuilder;
+leaseClientBuilder = leaseClientBuilder.blobClient(blobClient);
+
+leaseClient = leaseClientBuilder.buildClient();
+
+% Acquire a lease
+leaseId = leaseClient.acquireLease(-1);
+
+% Upload a new file to overwrite the blob
+blobClient.uploadFromFile('myfile.txt','overwrite',true,'leaseId',leaseId);
+
+% Delete the blob while the lease is active
+blobClient.deleteBlob('leaseId',leaseId);
+
+
+
+
+
+

Advanced listing support

+

A basic listing of a container’s contents can be done as follows:

+
% Get a blob name and create a client using it
+results = containerClient.listBlobs;
+% Assume there is a blob with name:
+results(1).getName();
+
+
+

This returns an array of BlobItems in a container, with folder structures flattened. The Java PagedIterable is consumed by the MATLAB listBlobs methods, while convenient this makes the method unsuitable for use with containers with very large numbers of blobs. Blob names are returned in lexicographic order.

+

The BlobItem.isPrefix method can be used to determine if an entry is a directory or not.

+

It is sometimes necessary to provide a more advanced query. This can be done using the following additions:

+
    +
  • A directory name prefix

  • +
  • An azure.storage.blob.models.BlobListDetails object

  • +
  • An azure.storage.blob.models.ListBlobsOptions object

  • +
+
+

Using a prefix/directory

+

BlobContainerClient.listBlobsByHierarchy(directory) Returns all the blobs and directories (prefixes) under the given directory (prefix). Directories will have BlobItem.isPrefix() set to true. Blob names are returned in lexicographic order. E.g. listing a container containing a ‘foo’ folder, which contains blobs ‘foo1’ and ‘foo2’, and a blob on the root level ‘bar’, will return the following results when prefix/directory is not set.

+
    +
  • foo/ (isPrefix = true)

  • +
  • bar (isPrefix = false)

  • +
+

And will return the following results when prefix=”foo/”:

+
    +
  • foo/foo1 (isPrefix = false)

  • +
  • foo/foo2 (isPrefix = false)

  • +
+

Alternatively the following arguments can be provided BlobContainerClient.listBlobsByHierarchy(delimiter, options, timeout):

+
    +
  • delimiter - The delimiter for blob hierarchy, “/” for hierarchy based on directories. “/” should be used in almost all circumstances.

  • +
  • options - ListBlobsOptions, see below.

  • +
  • timeout - A number of seconds timeout value beyond which a runtime exception will be raised.

  • +
+
+
+

ListBlobsOptions

+

A ListBlobsOptions object allows the following criteria to be set:

+
    +
  • setDetails(blobListDetails) further options see below.

  • +
  • setMaxResultsPerPage(maxResultsPerPage) Specifies the maximum number of blobs to return, including all BlobPrefix elements. In practice the list methods consume the iterators, so unless working directly with the Java Handle methods this should be ignored.

  • +
  • setPrefix(prefix) Filters the results to return only blobs whose names begin with the specified prefix.

  • +
+

set methods return an updated ListBlobsOptions object. get methods are also provided.

+
+
+

BlobListDetails

+

Allows specifying of additional information to be returned with each blob when listing blobs in a container (via a BlobContainerClient object). This type is immutable to ensure thread-safety of requests, so changing the details for a different listing operation requires construction of a new object.

+

get methods return logicals and set methods return an updated BlobListDetails object.

+
    +
  • getRetrieveCopy() Whether blob metadata related to any current or previous Copy Blob operation should be included in the response.

  • +
  • getRetrieveDeletedBlobs() Whether blobs which have been soft deleted should be returned.

  • +
  • getRetrieveDeletedBlobsWithVersions() Whether blobs which have been deleted with versioning.

  • +
  • getRetrieveImmutabilityPolicy() Whether immutability policy for the blob should be returned.

  • +
  • getRetrieveLegalHold() Whether legal hold for the blob should be returned.

  • +
  • getRetrieveMetadata() Whether blob metadata should be returned.

  • +
  • getRetrieveSnapshots() Whether snapshots should be returned.

  • +
  • getRetrieveTags() Whether blob tags should be returned.

  • +
  • getRetrieveUncommittedBlobs() Whether blobs for which blocks have been uploaded, but which have not been committed using Put Block List, should be included in the response.

  • +
  • getRetrieveVersions() Whether versions should be returned.

  • +
+
+
+
+

Blob properties & metadata

+

A blob’s properties can be queried reason about the blob, e.g. check its MD5 or size. +In this case the file/object is 0 bytes in size.

+
>> myBlob = l(1)
+myBlob = 
+  BlobItem with no properties.
+>> myProps = myBlob.getProperties;
+>> myProps.getContentMd5
+ans =
+    '1B2M2Y8AsgTpgAmY7PhCfg=='
+>> myProps.getContentLength
+ans =
+  int64
+   0
+
+
+

Use methods() on a properties object to explore the available data.

+
+

Note

+

properties is a reserved word in MATLAB and should not be used as a variable name etc.

+
+

In this case the blob has no available metadata, an empty containers.Map is returned:

+
% Create a Container client
+client = builder.buildClient();
+% Create a BlobListDetails to control what blob details are returned when listing
+b = azure.storage.blob.models.BlobListDetails();
+% Enable Metadata & Tags
+b = b.setRetrieveMetadata(true);
+b = b.setRetrieveTags(true);
+% Create a ListBlobsOptions to hold the BlobListDetails
+l = azure.storage.blob.models.ListBlobsOptions();
+lnew = l.setDetails(b);
+
+% Return a list of blobs, "/" is teh delimiter and 60 is a timeout in seconds
+l = client.listBlobsByHierarchy("/", lnew, 60);
+
+% Pick one of the returned blobs
+myBlob = l(1);
+% Get the Metadata
+md = myBlob.getMetadata
+md = 
+  Map with properties:
+        Count: 1
+      KeyType: char
+    ValueType: char
+% Display the containers.Map content in this case a tag
+md.keys
+ans =
+  1×1 cell array
+    {'barMetadataKey'}
+K>> md.values
+ans =
+  1×1 cell array
+    {'barMetadataVal'}
+
+% Get the tag directly and display the containers.Map content
+tags = myBlob.getTags
+tags = 
+  Map with properties:
+        Count: 1
+      KeyType: char
+    ValueType: char
+tags.keys
+ans =
+  1×1 cell array
+    {'barMetadataKey'}
+tags.values
+ans =
+  1×1 cell array
+    {'barMetadataVal'}
+
+
+

For more information, see https://azuresdkdocs.blob.core.windows.net/$web/java/azure-storage-blob/12.21.0/com/azure/storage/blob/BlobContainerClient.html#listBlobs()

+
+
+

Custom EndPoints

+

Typically and by default Azure storage endpoints follow the pattern: https://AccountName.Type.core.windows.net, e.g. https://mystorageaccount.blob.core.windows.net. However, endpoints may vary e.g. if using Azure Government or private endpoints, which are respectively https://AccountName.Type.core.usgovcloudapi.net and https://AccountName.privatelink.Type.core.windows.net. If configuring a client builder then the endpoint() method can be used to set such an endpoint directly. By default if using the createStorageClient() function it will use the account name and storage type to create a default endpoint. This can be overridden by passing an EndPoint named value argument pair or by setting and “EndPoint” field in the JSON configuration file used to provide settings and credentials.

+

For details of private endpoint use see: https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Configuration.html b/Documentation/html/Configuration.html new file mode 100644 index 0000000..6dd8d8d --- /dev/null +++ b/Documentation/html/Configuration.html @@ -0,0 +1,191 @@ + + + + + + + Configuration — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Configuration

+

The package offers a loadConfigurationSettings function which allows reading +configuration settings from a short JSON format file. This provides a convenient +way to configure various settings (like endpoint URLs) without having to +hardcode these into MATLAB® code. By convention settings are stored in the +Software/MATLAB/config directory. When calling loadConfigurationSettings the +name of the configuration file must be provided as input, e.g.:

+
settings = loadConfigurationSettings('mysettings.json');
+
+
+

If only a filename is provided the function will search for the file on the +MATLAB path. Alternatively a full absolute path can be provided as well.

+

An example mysettings.json file could look something like the following:

+
{
+    "myURL": "https://www.mathworks.com"
+}
+
+
+

And then in MATLAB this could be used as:

+
settings = loadConfigurationSettings('mysettings.json');
+homePage = webread(settings.myURL);
+
+
+
+

Authentication

+

The configureCredentials function for creating Azure® Credentials objects +relies on loadConfigurationSettings as well, it uses this same function to +read its settings from a JSON configuration file. Typically both Authentication +and other settings are in fact kept in a single JSON file. See +Authentication for more details on authentication specific +configuration options as used by configureCredentials.

+
+
+

Service specific settings

+

Service specific functions may rely on other additional configuration settings +as well. And they typically work with a service specific default filename for +the JSON file. But in most cases alternative filenames can be provided as well.

+

See the service specific documentation pages for more information on service +specific settings, the default JSON filename and how to provide an alternative +configuration file name if needed:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/DataExplorer.html b/Documentation/html/DataExplorer.html new file mode 100644 index 0000000..df8b3b0 --- /dev/null +++ b/Documentation/html/DataExplorer.html @@ -0,0 +1,142 @@ + + + + + + + Azure Data Explorer — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ +
+ +
+ +
+

© Copyright 2020-2024, MathWorks, Inc..

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/DataLakeStorageGen2.html b/Documentation/html/DataLakeStorageGen2.html new file mode 100644 index 0000000..8e1ec91 --- /dev/null +++ b/Documentation/html/DataLakeStorageGen2.html @@ -0,0 +1,290 @@ + + + + + + + Azure Data Lake Storage Gen2 — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Azure Data Lake Storage Gen2

+

The MATLAB® Azure™ Data Lake Storage Gen2 interface is a low-level interface +that supports:

+
    +
  • Blob

  • +
  • Queue

  • +
  • File Data Lake

  • +
+

The documentation below is split into separate files Blob Storage, +Queue Storage and File Data Lake Storage.

+

MATLAB’s IO operations increasingly support access to Blob Storage via builtin +interfaces, e.g. the dir command supports accessing remote data:

+ +

Where MATLAB supports the required operations directly it is recommended to use +that built in functionality.

+
+

createStorageClient function

+

The createStorageClient function can be used for creating BlobServiceClient, +BlobContainerClient, BlobClient, QueueServiceClient, QueueClient, +DataLakeFileSystemClient, DataLakeDirectoryClient and DataLakeFileClient.

+
% Create a BlobServiceClient with default options
+blobServiceClient = createStorageClient();
+% Create a BlobContainerClient with default options
+blobContainerClient = createStorageClient('ContainerName','myContainer');
+% Create a BlobClient with default options
+blobClient = createStorageClient('ContainerName','myContainer',...
+    'BlobName','myBlob') 
+% Create a QueueServiceClient with default options.
+queueServiceClient = createStorageClient('Type','QueueService') 
+% Create a QueueClient with default options.
+queueClient = createStorageClient('QueueName','myQueue')
+% Create a DataLakeFileSystemClient with default options.
+dataLakeFileSystemClient = createStorageClient('FileSystemName','myFileSystem') 
+% Create a DataLakeDirectoryClient with default options.
+dataLakeDirectoryClient = createStorageClient('FileSystemName','myFileSystem',...
+    'DirectoryName','my/dir') 
+%Creates a DataLakeFileClient with default options.
+dataLakeFileClient = createStorageClient('FileSystemName','myFileSystem',...
+    'FileName','my/dir/file') 
+
+
+

By default createStorageClient reads Credential information and the Account +Name (used to build the Client endpoint) from a configuration file named +storagesettings.json. The function automatically searches for this file on the +MATLAB path. It is possible to specify a different filename using +'ConfigurationFile'. It is also possible to provide 'Credentials' or +'SASToken' and 'AccountName' as inputs to the function directly in which +case no configuration file may be needed. See the Name, Value pairs below for +more details.

+
+

Name, Value pairs

+

Additional Name, Value pairs can be supplied to configure non-default options:

+

'Type', explicitly specify the type of client to create. Required for +creating QueueServiceClient. In all other cases the type of client is +derived from whether 'ContainerName', 'BlobName', 'QueueName', +'FileSystemName', 'DirectoryName', and/or 'FileName' are provided. +With none of these configured a BlobServiceClient is created. If only +BlobContainer is specified a BlobContainerClient is created, if both +BlobContainer and BlobName are specified a BlobClient is created. If +QueueName is specified a QueueClient is created. If only +FileSystemName is specified a DataLakeFileSystemClient is created, if +DirectoryName is specified as well, a DataLakeDirectoryClient is +created, or if FileName is specified a DataLakeFileClient is created.

+

Possible Values: 'BlobService', 'BlobContainer', 'Blob', +'QueueService', 'QueueClient', 'DataLakeDirectory', 'DataLakeFile', +or 'DataLakeFileSystem'.

+

'ConfigurationFile', explicitly specify which configuration file to use. +This file is used for configuring Credentials (when not supplied as input) +and/or Account Name (when not supplied as input).

+

Default Value: 'storagesettings.json'

+

'Credentials', explicitly specify credentials to use. This for example +allows building multiple clients based on the same credentials without having to +go through (interactive) authentication again. If neither this option nor +'SASToken' is specified, createStorageClient uses configureCredentials +with ‘ConfigurationFile’ as input to first configure credentials before building +the client.

+

Hint: configureCredentials can be used to build valid Credentials.

+

Example:

+
credentials = configureCredentials('myCredentials.json');
+client1 = createStorageClient('Credentials',credentials,'ContainerName','container1')
+client2 = createStorageClient('Credentials',credentials,'ContainerName','container2')
+
+
+

'SASToken', explicitly specify a SAS Token to use for authentication rather +than reading authentication details from a configuration file or a +credentials object passed in through the 'Credentials' option. If neither +this option nor 'Credentials' are specified, createStorageClient uses +configureCredentials with ‘ConfigurationFile’ as input to first configure +credentials before building the client.

+

'AccountName', explicitly specify the AccountName used to configure the +endpoint for the client. If not specified createStorageClient uses +loadConfigurationSettings to load configuration options from +'ConfigurationFile'. This file must then contain a “AccountName” setting.

+
+
+
+

Configuration options

+

The higher-level functions for this service use the same kind of configuration +options as discussed in Configuration.md. The service +specific options are discussed below.

+

The AzureStorageExplorer function requires LocalPathToStorageExplorer to be +set and it should point to your locally installed StorageExplorer.exe. The +createStorageClient function may use AccountName if not specified in the +call to createStorageClient. For example:

+
{
+  "LocalPathToStorageExplorer" : "C:\\Program Files (x86)\\Microsoft Azure Storage Explorer\\StorageExplorer.exe",
+  "AccountName": "mystorageaccount"
+}
+
+
+

The default name of the JSON file which createStorageClient works with is +storagesettings.json.

+

The clients for the various services follow a common design pattern with +considerable overlap. Blob is documented in the greatest detail and is should be +referred to even if using the other APIs.

+
+
+

Multi-protocol access

+

If accessing storage via various clients and protocols it is important to consider +how this differs from pre Gen2 capabilities, the following Azure documentation +is recommended:

+ +
+
+

Low Level Interfaces

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Deployment.html b/Documentation/html/Deployment.html new file mode 100644 index 0000000..78b2eb9 --- /dev/null +++ b/Documentation/html/Deployment.html @@ -0,0 +1,223 @@ + + + + + + + MATLAB Compiler (SDK) Deployment — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

MATLAB Compiler (SDK) Deployment

+

When compiling MATLAB™ code, in general, MATLAB Compiler™ will do a dependency analysis of the code and automatically include all the necessary files. However in the case of this package, because Java components are used which need to be loaded on the static Java class path, additional steps are required.

+

Three options are discussed below for making the correct JAR-files available to the deployed component.

+
    +
  • The first option is the easiest but will add the JAR-file to the end of the static class path; see the installation documentation to learn more about what limitations this may introduce depending on the platform.

  • +
  • The second option can add the JAR-file to the front of the static Java class path but is more involved.

  • +
  • The last option adds the JAR-file to the MATLAB Runtime installation rather than include it with the component, making it available to all standalone components using that MATLAB Runtime installation.

  • +
+
+

Hint

+

Contact us at mwlab@mathworks.com if you require additional advice on your specific use-case of deploying MATLAB Code which makes use of the “MATLAB Interface for Azure Services”.

+
+
+

Option One: Compile the JAR-file into the standalone component

+

Any JAR-file which is compiled into a MATLAB Compiler (SDK) standalone component will automatically be added to the Java static1 class path at runtime of the component. This will add the JAR-file to the end of the Java class path though, which on Windows should not be a problem but may introduce limitations on Linux.

+

To compile the JAR-files into the component, in the Application- or Library Compiler App under “Files required for your application to run” (or when working with mcc, using the -a argument), explicitly add the following files to the component, they will not be added by automatic dependency analysis:

+
    +
  • matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar

  • +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties

  • +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-api.jar

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar

  • +
+

Where $MATLABROOT stands for the MATLAB installation directory as returned by running the matlabroot function in the MATLAB Command Window.

+
+
+

Option Two: Modified javaclasspath.txt and distribute JAR-file next to component

+

During the installation of the package, a javaclasspath.txt will have been created in the MATLAB preferences directory, with the following content:

+
<before>
+/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar
+
+
+

This javaclasspath.txt from the preferences directory can be included in MATLAB Compiler (SDK) standalone components and will then actually be used at runtime of the component. The problem however is that this typically refers to an absolute path which exists on the development machine but which will likely not exist on target machines to which the standalone component is deployed.

+

However, the javaclasspath.txt file can be updated to the following before compiling the standalone component:

+
<before>
+/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar
+./azure-common-sdk-0.2.0.jar
+
+
+

Where the line which added at the bottom basically says: load azure-common-sdk-0.2.0.jar from ./ which stands for “the current directory”.

+

Now when compiling a standalone component with this updated javaclasspath.txt, that component can load the JAR-file from either the specified absolute location or “the current directory at runtime of the standalone component”. Where “the current directory at runtime” is typically quite simply equal to the directory where the main executable is located.

+

Further, for this workflow, in the Application- or Library Compiler App under “Files required for your application to run” (or when working with mcc, using the -a argument), explicitly add the following files to the component:

+
    +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties

  • +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-api.jar

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar

  • +
  • $PREFDIR/javaclasspath.txt

  • +
+

Where $PREFDIR stands for the MATLAB preferences directory as returned by running the prefdir function in the MATLAB Command Windows. Depending on the exact MATLAB Compiler version, some versions may already include $PREFDIR/javaclasspath.txt automatically; by adding it explicitly though, this approach should work in all supported releases.

+

And then, if working with MATLAB Compiler (SDK) packaged installers, under “Files installed for your end user”, add:

+
    +
  • matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar

  • +
+

The packaged installer will then place the JAR-file next to the standalone component during installation. Alternatively, if not working with the packaged installers, simply manually distribute azure-common-sdk-0.2.0.jar next to the standalone component itself, in the same directory.

+
+
+

Option Three: Make JAR-file available in MATLAB Runtime

+

JAR-files can only be added to the static class path upon initialization of the MATLAB Runtime. In use cases where multiple standalone components are used in a single application, there will be only one MATLAB Runtime instance which is instantiated upon first interaction with the first component. If a component is loaded after initial initialization of the MATLAB Runtime, its JAR-files are added to the dynamic class path rather than the static class path. Unfortunately azure-common-sdk-0.2.0.jar must be loaded on the static class path though.

+

In some situation, for example when working with multiple MATLAB Compiler Java/.NET/Python modules in a single Java/.NET/Python application, this is simply something to “keep in mind” and it may be possible to ensure that the right component is loaded first. However, this can not always be guaranteed, especially in MATLAB Production Server workflows, where it is not possible to predict which component will be called first inside which worker process. In such situations an option could be to add the JAR-file to the MATLAB Runtime such that it is always loaded, regardless of which exact component instantiated this runtime first.

+

First, at compile time, again add the following two files to the “Files required for your application to run” (or using mcc’s -a flag):

+
    +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties

  • +
  • matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml

  • +
+

Then, manually copy the following three files to the target machine onto which the component will be deployed:

+
    +
  • matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-api.jar

  • +
  • $MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar

  • +
+

The files can basically be placed anywhere on this machine as long as they are accessible by the runtime. Lastly, also on the target machine where the MATLAB Runtime has been installed, open $MCRROOT/toolbox/local/classpath.txt (where $MCRROOT stands for the installation directory of the MATLAB Runtime) in a text editor and add the full absolute locations of the three files to the front of the list of JAR-files and directories in the text file.

+
+

Note

+

The toolbox/local/classpath.txt file contains a notification:

+
#DO NOT MODIFY THIS FILE.  IT IS AN AUTOGENERATED FILE.
+
+
+

For this particular use-case, this can partly be ignored, the file may be edited but do indeed keep in mind that it may be changed or overwritten when reinstalling the MATLAB Runtime or installing an Update to the runtime. The modification may have to be reapplied afterwards.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Dynamics.html b/Documentation/html/Dynamics.html new file mode 100644 index 0000000..7e9c248 --- /dev/null +++ b/Documentation/html/Dynamics.html @@ -0,0 +1,196 @@ + + + + + + + Dynamic Data — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dynamic Data

+

The Azure Data Explorer® Documentations describes the dynamic data type as follows:

+

The dynamic scalar data type is special in that it can take on any value of other +scalar data types from the list below, as well as arrays and property bags. +Specifically, a dynamic value can be:

+
* Null.
+* A value of any of the primitive scalar data types: bool, datetime, guid, int, long, real, string, and timespan.
+* An array of dynamic values, holding zero or more values with zero-based indexing.
+* A property bag that maps unique string values to dynamic values. The property bag has zero or more such mappings (called "slots"), indexed by the unique string values. The slots are unordered.
+
+
+

For further details see: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic

+

When ADX returns dynamic data to MATLAB® the potentially varied nature of that data +means that such a column in a results table will be of type cell. +For reasons that will be described it may be preferred to not attempt convert the +dynamic data to an underlying type(s) but rather to simply return the value +of the the dynamic as a character vector. The optional argument convertDynamics +can be used to control this behavior, the default value is true, i.e. attempt to +convert the dynamic data.

+

If automatic decoding of a value does not give the desired result it is recommended +that the values not be decoded and custom logic be implemented to do so using the +returned character vector values.

+

If a dynamic is not to be converted the following approach is taken.

+
    +
  • If the value is presents as a JSON array or object, the character vector value +is returned.

  • +
  • If the value is a JSON null, the NullPolicy is applied, by default a missing +will be returned.

  • +
  • Otherwise the character vector value is returned.

  • +
+

If the dynamic value is to be converted this cannot be handled with the same certainty +as the conversion of other data types. The metadata returned from ADX does not +describe the contents of the value or provide a schema that might be used to decode +it. ADX does not have such information. Thus the automatic decoding should be +considered a best effort. When decoding dynamics the following steps are taken in +sequence:

+
    +
  • If the value is a JSON primitive, Booleans will be converted to logicals and numbers +will be converted to doubles. Null policy is applied. Strings will be passed to MATLAB’s jsondecode +function. If the jsondecode call fails the value will be returned as a character vector.

  • +
  • If the value is a JSON null NullPolicy is applied and by default a missing +is returned.

  • +
  • If the value is an empty JSON array NullPolicy is applied and by default a missing +is returned. Non empty JSON arrays are decoded using jsondecode, if that fails +the character vector value is returned.

  • +
  • If the value is a JSON object is decoded using decoded using jsondecode, if that fails +the character vector value is returned.

  • +
+

Note:

+
    +
  • For more information on MATLAB’s jsondecode function see: +https://www.mathworks.com/help/matlab/ref/jsondecode.html noting that it has limitations

  • +
  • For further details on the handling of null values see NullData.md.

  • +
  • The additional processing of dynamic values as described inevitably has a performance +impact, if this is a concern consider approaches that alter the data being queried +or queries themselves such that non dynamic data types are used.

  • +
+

The testDynamic test function in /matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m +shows some simple queries that used for dynamic testing purposes.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/FAQ.html b/Documentation/html/FAQ.html new file mode 100644 index 0000000..2af65d6 --- /dev/null +++ b/Documentation/html/FAQ.html @@ -0,0 +1,190 @@ + + + + + + + Frequently Asked Questions — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Frequently Asked Questions

+
+

Azure Java SDK

+
+

How to change the underlying library logging level

+

The Azure® interfaces rely on an number of underlying libraries which are +included in the Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar Jar file. +Many of these libraries use slf4j as a logging mechanism. Further, MATLAB® itself +also includes slf4j and MATLAB configures it to use log4j as backend. So when +used in MATLAB, these libraries end up using sl4j with log4j as backend. Which +exact log4j version is used, depends on the MATLAB release. MATLAB releases up +to MATLAB R2021b Update 2 use log4j versions 1.x, MATLAB R2021b Update 2 and +newer use log4j versions 2.x.

+

The logging level and destination of log4j versions 1.x can be controlled using +Software/MATLAB/lib/jar/log4j.properties and for log4j versions 2.x using +Software/MATLAB/lib/jar/log4j2.xml. By default they log at the ERROR level. +To change this to INFO for example use the following in log4j.properties:

+
log4j.rootLogger=INFO, stdout
+
+
+

or the following in log4j2.xml:

+
<Root level="info" additivity="false">
+
+
+
+
+
+

Azure Data Explorer

+
+

BadRequest_StreamingIngestionPolicyNotEnabled error

+

This error indicates a need to configure streaming ingestion on your Azure Data Explorer cluster. +See: https://learn.microsoft.com/en-us/azure/data-explorer/ingest-data-streaming?tabs=azure-portal%2Ccsharp#choose-the-appropriate-streaming-ingestion-type

+

The queries described can be issued using this package.

+
+
+

Unable to resolve the name ‘com.azure.identity.InteractiveBrowserCredentialBuilder’

+

This error is likely to be proceeded by Getting ingestion resources, the probable cause in that +the Azure Services SDK jar file which is required for interactive authentication is not found +of the Java static classpath, review the output of the startup command which may refer to this +also.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/File.html b/Documentation/html/File.html new file mode 100644 index 0000000..1d1a374 --- /dev/null +++ b/Documentation/html/File.html @@ -0,0 +1,347 @@ + + + + + + + File Data Lake Storage — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

File Data Lake Storage

+

The File Data Lake API currently has less implemented functionality than the equivalent +Blob and Queue APIs, where additional API calls are needed contact MathWorks.

+

Relevant Azure® API/service documentation:

+ +
+

File Data Lake Clients

+

The concept of a Client is central to how file storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy:

+
    +
  1. Path

  2. +
  3. Filesystem

  4. +
  5. Directory

  6. +
  7. File

  8. +
+
+
+

High-level Client Creation

+

As with other services both high-level and low-level approaches for creating +various clients are supported.

+
% creates a DataLakeFileSystemClient with default options
+client = createStorageClient('FileSystemName','myFileSystem');
+
+
+
% Creates a DataLakeDirectoryClient with default options
+client = createStorageClient('FileSystemName','myFileSystem',...
+               'DirectoryName','my/dir');
+
+
+
%  Creates a DataLakeFileClient with default options
+client = createStorageClient('FileSystemName','myFileSystem',...
+               'FileName','my/dir/file');
+
+
+

Additional Name, Value pairs can be supplied to configure non-default options. See: doc createStorageClient for more details.

+
+
+

URL Format

+

File path are addressable using the following URL format:

+

https://myaccount.dfs.core.windows.net/myfilesystem/myfilepath

+

Filesystems can be thought of as being similar to Blob Containers and Paths for +files or Directories as being similar to Blobs.

+
+
+

Build a Filesystem Client

+
% Read a shared storage key from a file
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json'));
+
+% Create a filesystem builder
+builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder();
+
+% Configure the builder's credentials, http client, endpoint and name
+builder = builder.credential(credentials);
+builder = builder.httpClient();
+endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net'];
+builder = builder.endpoint(endpoint);
+builder = builder.fileSystemName("myfilesystemname");
+
+% Build the client
+client = builder.buildClient();
+
+
+

A very similar Path class, azure.storage.file.datalake.DataLakePathClientBuilder() exists.

+
+
+

Build a Filesystem Client to work with SASs

+
% Create some minimal permissions
+FSSP = azure.storage.file.datalake.sas.FileSystemSasPermission();
+FSSP = FSSP.setListPermission(true);
+FSSP = FSSP.setReadPermission(true);
+
+% Set the SAS to expire in 1 days 
+expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1);
+DLSSSV = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, FSSP);
+
+% Requires a shared storage key based client for SAS generation
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json'));
+
+% Build the client previously shown
+builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder();
+builder = builder.credential(credentials);
+endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net'];
+builder = builder.endpoint(endpoint);
+builder = builder.httpClient();
+builder = builder.fileSystemName("myfilesystemname");
+client = builder.buildClient();
+
+% Use the client to generate a SAS
+sasToken = client.generateSas(DLSSSV);
+
+% Return an array of azure.storage.file.datalake.models.PathItem
+% detailing filesystem contents
+paths = client.listPaths();
+
+% Build a second client authenticated with the previoulsy creates SAS
+builder2 = azure.storage.file.datalake.DataLakeFileSystemClientBuilder();
+builder2 = builder2.sasToken(sasToken);
+endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net'];
+builder2 = builder2.endpoint(endpoint);
+builder2 = builder2.httpClient();
+builder2 = builder2.fileSystemName("myfilesystemname");
+client2 = builder2.buildClient();
+
+% Perform an operation using it
+paths = client2.listPaths();
+
+
+
+
+

SAS Permissions

+

A Path SAS Permission is created as follows:

+
psp = azure.storage.file.datalake.sas.PathSasPermission();
+
+
+

By default all permissions are disabled and the following methods return false:

+
psp.hasAddPermission();
+psp.hasCreatePermission();
+psp.hasDeletePermission();
+psp.hasExecutePermission();
+psp.hasListPermission();
+psp.hasManageAccessControlPermission();
+psp.hasManageOwnershipPermission();
+psp.hasMovePermission();
+psp.hasReadPermission();
+psp.hasWritePermission();
+
+
+

There are corresponding set permission methods that accept a logical and return +and updated permission:

+
psp = psp.setCreatePermission(true);
+
+
+

A File System permission class with very similar functionality also exists:

+
fssp = azure.storage.file.datalake.sas.FileSystemSasPermission();
+
+
+
+
+

Directory Clients & misc. operations

+
% Begin by creating a Path Client
+builder = azure.storage.file.datalake.DataLakePathClientBuilder();
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json'));
+builder = builder.credential(credentials);
+endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net'];
+builder = builder.endpoint(endpoint);
+builder = builder.httpClient();
+builder = builder.fileSystemName("myfilesystemname");
+builder = builder.pathName('mydirectoryname');
+dirClient = builder.buildDirectoryClient();
+
+% Check if the path exists
+tf = Client.exists();
+
+% Create a Directory Client from a Filesystem Client
+builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder();
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json'));
+builder = builder.credential(credentials);
+endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net'];
+builder = builder.endpoint(endpoint);
+builder = builder.httpClient();
+builder = builder.fileSystemName("myfilesystemname");
+fsClient = builder.buildClient();
+
+% Create Directory Client
+existingDirClient = fsClient.createDirectory('myOtherDirectory', true);
+
+% Return the path & URL
+path = existingDirClient.getDirectoryPath();
+url = existingDirClient.getDirectoryUrl();
+
+% Delete the directory
+existingDirClient.deleteDirectory();
+
+% Create and Delete a subdirectory on the filesystem
+level1DirClient = fsClient.createDirectory('level1', true);
+level2DirClient = fsClient.createDirectory('level1/level2', true);
+level1DirClient.deleteSubdirectory('level2');
+% verify using an exists() method
+level2DirClient.exists();
+
+% Create a File
+level1DirClient = fsClient.createDirectory('level1', true);
+level1FileClient = level1DirClient.createFile('tmpFile.txt', true);
+            
+% Rename a directory from srcDir to dstDir
+srcDirClient = fsClient.createDirectory('srcDir', true);
+nullVal = [];
+renamedDirClient = srcDirClient.rename(nullVal, 'dstDir');
+
+
+
+
+

Notes

+

This API does not support storage accounts where hierarchical namespace (HNS) is disabled.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Installation.html b/Documentation/html/Installation.html new file mode 100644 index 0000000..65a7f47 --- /dev/null +++ b/Documentation/html/Installation.html @@ -0,0 +1,225 @@ + + + + + + + Installation — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Installation

+
+

Clone this repository

+
git clone https://github.com/mathworks-ref-arch/matlab-azure-services.git
+
+
+
+
+

Build MATLAB Azure SDK Jar

+

MATLAB® Interface for Azure Services depends on the Azure® Java SDK which, +together with some helper code, first needs to be packaged into the MATLAB Azure +Utility Library. Building this utility requires both a Java 1.8 SDK and Apache +Maven.

+

The build process downloads a number of required 3rd party packages. The +specifics of which can be derived from the pom file.

+

To build the utility using Maven:

+
cd Software/Java
+mvn clean package
+
+
+

The build should produce the file: Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar

+
+
+

Configuring the MATLAB Java class path

+

Having built the SDK jar file, it must be included in the MATLAB Java class +path. The jar file must be added to the static class path. On Windows® the jar +file can be added at any position on the static class path, it can be added to +the start or at the end. On Linux the jar file must be added at the start of +the static java class path if SharedTokenCacheCredential and +TokenCachePersistenceOptions are used, if not, the jar file can be in any +position on the static java class path.

+
+

Note

+

When making use of MathWorks features which can automatically add +jar files to the static class path, these typically add them to then end of +the static class path. For example when working with a packaged custom +toolbox +the included jar file is added to the end of the static path in the end user +MATLAB installation. Or if working with MATLAB Compiler® (SDK) standalone +components the jar file which was packaged into the component are +automatically added to the end of the static class path at runtime. However +there may be situations in which this is not possible and then these features +may add the jar file to the dynamic class path.

+
+

In general the recommended approach to add the jar file to the static java class +path in a local MATLAB installation is to add an entry to the +javaclasspath.txt file in MATLAB’s preferences directory. To create or open +this file in the MATLAB editor you can type the following command in the MATLAB +Command Window:

+
edit(fullfile(prefdir,'javaclasspath.txt'));
+
+
+

Add the following content to the file, noting:

+
    +
  • Specific version numbers may change in future releases.

  • +
  • Delimiters and path formats will change base on the operating system in use.

  • +
  • Full absolute paths should be provided.

  • +
  • Both the absolute full path of the JAR-file as well as the directory +containing the JAR are listed. The directory is added to make Log4j +configuration files available to MATLAB.

  • +
  • The <before> tag as shown below is optional and can be used to add the jar +file to the start of the path (see above for more details on when this is +needed).

  • +
+
<before>
+/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar
+
+
+

To verify that the change has made been successfully, restart MATLAB and run the +javaclasspath command, the entries should be found at either the beginning or +the end of the output.

+

To be able to use the interface, its directories need to be added to the +MATLAB path. To add the required directories run startup.m from the +Software/MATLAB directory.

+

The interface should now be ready to be configured and used, see +Authentication and Configuration +for further details.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/KeyVault.html b/Documentation/html/KeyVault.html new file mode 100644 index 0000000..af91c08 --- /dev/null +++ b/Documentation/html/KeyVault.html @@ -0,0 +1,523 @@ + + + + + + + Azure Key Vault — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Azure Key Vault

+

The MATLAB® Azure® Key Vault Interface enables the manipulation of Key Vault +Secrets and Keys from within MATLAB. Certificates are not currently supported.

+
+

Configuration options

+

The higher-level client functions for this service use the same kind of configuration +options as discussed in Configuration.md. The service +specific options are discussed below.

+

The createKeyVaultClient function may use VaultName if not +specified in the call to createKeyVaultClient, for example:

+
{
+    "VaultName": "myvaultname"
+}
+
+
+

The default name of the JSON file which createKeyVaultClient works with is keyvaultsettings.json.

+
+
+

createKeyVaultClient function

+

createKeyVaultClient is a higher-level function for creating a KeyClient or +SecretClient

+
% Create a KeyClient with default options
+keyClient = createKeyVaultClient('Type','Key') 
+% Create a SecretClient with default options
+secretClient = createKeyVaultClient('Type','Secret') 
+
+
+

By default createKeyVaultClient reads credential information and the vault +name from a configuration file named 'keyvaultsettings.json'. The function +automatically searches for this file on the MATLAB path. It is possible to +specify a different filename using 'ConfigurationFile'. It is also possible to +provide 'Credentials' and 'VaultName' as inputs to the function directly in +which case no configuration file may be needed. See the Name, Value pairs below +for more details.

+
+

Name, Value pairs

+

Additional Name, Value pairs can be supplied to configure non-default options:

+

'ConfigurationFile', explicitly specify which configuration file to use. +This file is used for configuring Credentials (when not supplied as input) +and/or Account Name (when not supplied as input).

+

Default Value: 'keyvaultsettings.json'

+

'Credentials', explicitly specify credentials to use. This for example +allows building multiple clients based on the same credentials without having to +go through (interactive) authentication again. If not specified, +createKeyVaultClient uses configureCredentials with ‘ConfigurationFile’ as +input to first configure credentials before building the client.

+

Hint: configureCredentials can be used to build valid Credentials.

+

Example:

+
credentials = configureCredentials('myCredentials.json');
+keyClient = createKeyVaultClient('Credentials',credentials,'Type','Key')
+secretClient = createKeyVaultClient('Credentials',credentials,'Type','Secret')
+
+
+

'VaultName', explicitly specify the vault name for the client. If not +specified createKeyVaultClient uses loadConfigurationSettings to load +configuration options from 'ConfigurationFile'. This file must then contain a +“VaultName” setting.

+
+
+
+

Creating a secret client

+

A client is used to access secrets or keys in Key Vault. Certificates are not +currently supported.

+

A number of steps are required to build a client. A higher-level function +createKeyVaultClient() is provided to simplify this process. A key or secret +client can be created as follows:

+

If a configuration file path is not provided createKeyVaultClient() will +search the MATLAB path for a configuration file named keyvaultsettings.json.

+
secretClient = createKeyVaultClient('Type','Secret');
+
+
+

Here an optional non default configuration file path is provided.

+
secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json')
+
+
+

A client can be created manually as follows if customized configuration is +required, this should rarely be necessary and if so using a custom higher-level +wrapper function similar to createKeyVaultClient() is recommended:

+
% Create a clientBuilder object, a SecretClient in this case
+builder = azure.security.keyvault.secrets.SecretClientBuilder();
+
+% Configure a credentials object based on a JSON config file
+credentials = configureCredentials(which('azurekeyvault.json'));
+
+% Alternatively a KeyClientBuilder is created as follows:
+% builder = azure.security.keyvault.keys.KeyClientBuilder();
+
+% Configure the builder using its methods
+builder = builder.credential(credentials);
+builder = builder.httpClient();
+settings = loadConfigurationSettings(which('azurekeyvault.json'));
+builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+
+% Create the client
+secretClient = builder.buildClient();
+
+
+

A key client can be created similarly using the Key type:

+
keyClient = createKeyVaultClient('Type','Key')
+
+
+
+
+

Listing secrets in a vault

+

Secrets and keys have properties that can be obtained from Key Vault.

+
% Create a client
+secretClient = createKeyVaultClient('Type','Secret');
+
+% Get an array of secret properties
+propList = secretClient.listPropertiesOfSecrets();
+
+% Get the name property for the first entry
+name = propList(1).getName();
+
+
+
+
+

Accessing a secret

+

A secret value is easily accessed using the client. Note it is best practice to +clear a secretValue from memory once it is no longer needed and consider +carefully how that value is used, e.g. written to a file etc. Also use +semi-colons to prevent the value unintentionally being logged to MATLAB’s +console or other logs.

+
% Create a client
+secretClient = createKeyVaultClient('Type','Secret');
+% Get the secret using its name
+secret = secretClient.getSecret('mySecretName');
+% Get the secret value
+secretValue = secret.getValue();
+
+
+
+
+

Creating a secret

+

Secrets are easily created using a name value pair. Note it is good practice to +NOT include hardcoded secret values in code, contrary to this trivial example.

+
secretClient = createKeyVaultClient('Type','Secret');
+myNewSecret = secretClient.setSecret('mySecretName', 'mySecretValue');
+
+
+
+
+

Deleting a secret

+

Deleting a secret is an asynchronous operation and a SyncPoller object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Deleting a secret is normally a +quick operation.

+
secretClient = createKeyVaultClient('Type','Secret');
+
+% Start the process of deleting a secret
+syncPoller = secretClient.beginDeleteSecret('mySecretName');
+
+% Block until the delete complete or the 10 second timeout elapses.
+% The timeout value is optional, but can prevent unexpected hangs.
+syncPoller.waitForCompletion(10);
+
+
+
+
+

Additional operations on secrets in Key Vaults with soft-delete enabled

+

When working with key vaults with soft-delete enabled, deleted secrets can be +listed and recovered for a limited time, the default is 90 days but this can be +configured on a per key vault basis, or they can purged explicitly before this +time expires unless purge protection is enabled.

+
+

Listing deleted secrets

+
% Obtain the list of deleted secrets
+deletedSecrets = secretClient.listDeletedSecrets();
+% Get the name of the first deleted secret
+secretName = deletedSecrets(1).getName();
+% Check when the secret was deleted
+deletedSecrets(1).getDeletedOn()
+% Check when the secret is scheduled to be purged permanently
+deletedSecrets(1).getScheduledPurgeDate()
+
+
+
+

Note: The interface for Azure Key Vault follows the same design as +Azure Key Vault Java SDK here, meaning that the returned DeletedSecret +objects have the same methods as current secrets obtained with getSecret. So +for example, they also have a getValue method. The Azure Key Vault Java SDK +does not appear to actually return any values for deleted secrets however. To +be able to obtain the value, first recover the secret and then query the value +of the recovered secret.

+
+
+
+

Recovering a deleted secret

+

Recovering a secret is an asynchronous operation and a SyncPoller object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Recovering a secret is normally a +quick operation.

+
% Start the process of recovering a secret
+syncPoller = secretClient.beginRecoverDeletedSecret(secretName);
+% Block until the recovery complete or the 10 second timeout elapses.
+% The timeout value is optional, but can prevent unexpected hangs.
+syncPoller.waitForCompletion(10);
+
+
+
+
+

Purging a deleted secret

+

Key vault names are globally unique. The names of secrets stored in a key vault +are also unique. So it is not possible to reuse the name of a secret that exists +in the soft-deleted state. Hence it can be preferred to purge a secret before it +is purged automatically on its scheduled purge date.

+
% Purge a deleted secret right now
+secretClient.purgeDeletedSecret(secretName);
+
+
+
+
+
+

Creating a key client

+

A key client can be created as follows:

+
% Here an optional non default configuration file path is provided.
+keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-services\Software\MATLAB\config\ClientSecret.json')
+
+
+

By default createKeyVaultClient() will search the MATLAB path for keyvaultsettings.json.

+

A client can be created manually as follows if customized configuration is +required, this should rarely be necessary and if so using a custom wrapper +script similar to createKeyVaultClient() is recommended:

+
% Create a clientBuilder object, a KeyClient in this case
+builder = azure.security.keyvault.keys.KeyClientBuilder();
+
+% Configure a credentials object based on a JSON config file
+credentials = configureCredentials(which('azurekeyvault.json'));
+
+% Configure the builder using its methods
+builder = builder.credential(credentials);
+builder = builder.httpClient();
+settings = loadConfigurationSettings(which('azurekeyvault.json'));
+builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName));
+
+% Create the client
+keyClient = builder.buildClient();
+
+
+
+
+

Listing keys in a vault

+

Keys have properties that can be obtained from Key Vault.

+
% Create a client
+keyClient = createKeyVaultClient('Type','Key');
+
+% Get an array of secret properties
+properties = keyClient.listPropertiesOfKeys();
+
+% Get the name property for the first entry
+name = propList(1).getName();
+
+
+
+
+

Accessing a Key

+

A key can be returned in a number of forms, see +azure.security.keyvault.keys.models.JsonWebKey to methods. For +interoperability with other security libraries these methods return a Java key +object of varying types.

+
% Create a client
+keyClient = createKeyVaultClient('Type','Key');
+% Get the key using its name
+jsonWebKey = keyClient.getKey('myKeyName');
+% Convert the key to java.security.KeyPair RSA form
+keyRsa = jsonWebKey.toRsa(false);
+
+
+
+
+

Creating a key

+

Keys are easily created using a name and key type.

+
keyClient = createKeyVaultClient('Type','Key');
+rsaKey = azure.security.keyvault.keys.models.KeyType.RSA;
+key = keyClient.createKey('myTestRSAKey', rsaKey)
+
+
+
+
+

Deleting a key

+

Deleting a key is an asynchronous operation and a SyncPoller object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Deleting a key is normally a quick +operation.

+
keyClient = createKeyVaultClient('Type','Key');
+
+% Start the process of deleting a key
+syncPoller = keyClient.beginDeleteKey('myTestRSAKey');
+
+% Block until the delete complete or the 10 second timeout elapses.
+% The timeout value is optional, but can prevent unexpected hangs
+syncPoller.waitForCompletion(10);
+
+
+
+
+

Additional operations on keys in Key Vaults with soft-delete enabled

+

When working with key vaults with soft-delete enabled, deleted keys can be +listed and recovered for a limited time, the default is 90 days but this can be +configured on a per key vault basis, or purged explicitly before this time +expires unless purge protection is enabled.

+
+

Listing deleted keys

+
% Obtain the list of deleted keys
+deletedKeys = keyClient.listDeletedKeys();
+% Get the recovery ID of the first deleted key
+recoveryId = deletedKeys(1).getRecoveryId();
+% Check when the key was deleted
+deletedKeys(1).getDeletedOn()
+% Check when the key is scheduled to be purged permanently
+deletedKeys(1).getScheduledPurgeDate()
+
+
+
+

Note: The interface for Azure Key Vault follows the same design as +Azure Key Vault Java SDK here, meaning that the returned DeletedKey objects +have the same methods as current keys obtained with getKey. So for example +they also have a getKey and getName method. The Azure Key Vault Java SDK +does not appear to actually return all values for deleted keys though. For a +list of deleted keys obtained with listDeletedKeys it does not even appear +to be able to return the name for delete keys with getName. In that sense +the best option to obtain the name of a deleted key appears to be to use +getRecoveryId and then parse the return URI:

+
% Use matlab.net.URI to help parse the returned ID 
+recoveryURI = matlab.net.URI(deletedKeys(1).getRecoveryId());
+% The name of the key should be the last part of the URI Path
+keyName = recoveryURI.Path{end};
+
+
+
+
+
+

Recovering a deleted key

+

Recovering a key is an asynchronous operation and a SyncPoller object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or times out. Recovering a key is normally a quick +operation.

+
% Start the process of recovering a secret
+syncPoller = keyClient.beginRecoverDeletedKey(keyName);
+% Block until the recovery complete or the 10 second timeout elapses.
+% The timeout value is optional, but can prevent unexpected hangs.
+syncPoller.waitForCompletion(10);
+
+
+
+
+

Purging a deleted key

+

Key vault names are globally unique. The names of keys stored in a key vault are +also unique. So it is not possible to reuse the name of a key that exists in the +soft-deleted state. Hence it can be preferred to purge a key before it is purged +automatically on its scheduled purge date.

+
% Purge a deleted key right now
+keyClient.purgeDeletedKey(keyName);
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/NullData.html b/Documentation/html/NullData.html new file mode 100644 index 0000000..2fd9e3d --- /dev/null +++ b/Documentation/html/NullData.html @@ -0,0 +1,419 @@ + + + + + + + Null data — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Null data

+

In ADX all data types except string may have null values indicating that data is +not present. When bringing such data into MATLAB® consideration must be given to +the potential presence of null values. This package provides a number of approaches +to dealing with this issue.

+

Many MATLAB types support the concept of “missing” data where the missing value +can be used to identify data that is not available, see also ismissing(). +Other datatypes support NaN or NaT to indicate anomalous values.

+

The enumeration class mathworks.adx.NullPolicy can be passed as an +option to query functions to control how nulls are handled in responses. The +possible values of the enumeration are defined in the following table:

+ + + + + + + + + + + + + + + + + + + + +

Enumeration

Effect

ErrorAny

Error if any null values are detected

ErrorLogicalInt32Int64

Error if null values are detected for logicals, int32s or int64s

AllowAll

All null types to map to missing, NaN or NaT for all data types

Convert2Double

Convert logicals, int32s, & int64s to doubles

+

The default behavior is defined by ErrorLogicalInt32Int64.

+

Using the AllowAll policy has the effect of returning data as cell array values +This has an impact on memory and performance, for large queries altering the data +or the query to remove null may be preferable.

+

The following table defines how an ADX null is translated to a MATLAB value +subject to the enumeration value. +As dynamics can be converted into other types this table assumes the valid value +is not converted and thus remains a cell array containing a character vector.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Kusto type

MATLAB type

ADX Value

ErrorAny

ErrorLogicalInt32Int64

AllowAll

Convert2Double

bool

logical

null

error

error

{missing}

NaN

valid

logical

logical

{logical}

0 or 1 as a double

int

int32

null

error

error

{missing}

NaN

valid

int32

int32

{int32}

as a double

long

int64

null

error

error

{missing}

NaN

valid

int64

int64

{int64}

as a double [N1]

datetime

datetime

null [N5]

error

NaT

NaT

NaT

valid

datetime

datetime

datetime

datetime

guid

string

null

error

missing

missing

missing

valid

string

string

string

string

real

double

null

error

NaN

NaN

NaN

valid

double

double

double

double

string

string

N/A [N3]

error

“”

“”

“”

N/A [N4]

“”

“”

“”

“”

valid

string

string

string

string

timespan

duration

null

error

NaN

NaN

NaN

valid

duration

duration

duration

duration

decimal

double

null

error

NaN

NaN

NaN

valid

double

double

double

double [N1]

dynamic

char [N2]

null

error

{missing}

{missing}

{missing} [N2]

valid

{char} [N2]

{char} [N2]

{char} [N2]

{char} [N2]

+ + + + + + + + + + + + + + + + + + + + + + + +

Notes

[N1]

Subject to loss of precision

[N2]

Assuming the value is not decode, see Dynamics.md

[N3]

Kusto does not store null strings, however metadata and commands can return null strings that still need to be converted to tables

[N4]

If the allowNullStrings argument is set the the nullPolicy is not applied a warning is issued, this can be used to enable different behavior in queries and commands for example

[N5]

When a datetime NaT is returned its timezone is set to UTC as per other datetimes

+
+

Note that metadata tables returned along side conventional query results also +adopt the null policy applied to the query result.

+
+

The testNulls test function in /matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m +shows some simple queries that can be used to easily return nulls for testing purposes.

+
+

Null error

+

If a null is encountered, in this case a null long/int64 is returned when using a +null policy that does not support it an error such as the following is returned. +In this case a possible solution would be: +mathworks.adx.run(myQueryString, mathworks.adx.NullPolicy.AllowAll) +It may be preferable to resolve this issue in the query or the data set such that +the data returned to MATLAB is free of nulls.

+
>> [result, success] = mathworks.adx.run(myQueryString)
+Error using mathworks.internal.adx.getRowWithSchema>convert2Int64 (line 237)
+int64 null values are not supported when using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (2,18)
+Error in mathworks.internal.adx.getRowWithSchema (line 50)
+                row{colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx);
+
+
+
+

Tip: In the above error message the (2,18) indicates that the issue was detected +in row 2 column 18.

+
+
+
+

References

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/OpenAPI.html b/Documentation/html/OpenAPI.html new file mode 100644 index 0000000..3b46181 --- /dev/null +++ b/Documentation/html/OpenAPI.html @@ -0,0 +1,218 @@ + + + + + + + Azure Data Explorer OpenAPI Spec — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Azure Data Explorer OpenAPI Spec

+

This file documents the process of building the control plane OpenAPI based client. +It is not expected that end users should need to use or be familiar with this workflow.

+
+

Spec download

+

See: https://github.com/microsoft/azure-rest-api-specs/tree/kusto-demo/specification/azure-kusto/resource-manager

+
git clone https://github.com/Azure/azure-rest-api-specs.git
+
+
+
+
+

AutoRest

+

AutoRest is required to convert the spec from 2.0 to 3

+
+

Install AutoRest

+

See: https://github.com/Azure/autorest/blob/main/docs/install/readme.md

+
npm install -g autorest
+
+
+
+
+

Convert Spec

+

Use AutoRest to generate a spec. in v3.0 format

+
cd azure-rest-api-specs/specification/azure-kusto/resource-manager
+npx autorest --output-converted-oai3
+
+
+

Creates a spec in: azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable/<2022-11-11> +where the data is the latest release folder

+
+
+
+

Generate a client using a MATLAB client

+
% Assuming the Java files have been built using maven
+% In the openAPI Code generator package's directory
+% cd Software/Java
+% !mvn clean package
+
+% Run startup to configure the package's MATLAB paths
+cd <ADX package directory>Software/MATLAB
+startup
+
+buildControlPlaneClient
+
+
+
+
+

Generate a client with npx

+

Generally this approach is not required or preferred.

+

Check openapitools version are at version 6.2.1 or greater.

+
npx @openapitools/openapi-generator-cli version
+
+
+
# Change to OpenAPI client generation package directory
+# Call the client generator
+npx @openapitools/openapi-generator-cli --custom-generator ./Java/target/classes \
+ generate -g MATLAB \
+ -i /home/<username>/git/azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable/<release date>/kusto.json \
+ -o KustoClient --package-name kusto | tee gen.log
+
+
+
+
+

Customize the Client

+
    +
  • For now use find and replace across the generated files to get rid of apiVersion and subscriptionId such that they are no longer inputs and object properties instead.

  • +
  • Remove “object” as a type in SkuDescription.

  • +
  • Add auth to presend().

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Overview.html b/Documentation/html/Overview.html new file mode 100644 index 0000000..562c4a9 --- /dev/null +++ b/Documentation/html/Overview.html @@ -0,0 +1,384 @@ + + + + + + + MATLAB Interface for Azure Services — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

MATLAB Interface for Azure Services

+

This package provides MATLAB® interfaces that connect to various Microsoft Azure® +Services, it currently supports:

+ +
+

Note, very many of MATLAB’s IO operations support Blob Storage via builtin functions. +For example dir supports accessing remote data:

+ +

Where MATLAB supports the required operations, it is recommended to use the builtin +support, particularly in preference to this package’s Azure Data Lake Storage Gen2 +lower level capabilities.

+
+
+

Requirements

+
    +
  • MathWorks® Products

    +
      +
    • MATLAB® R2019a or later

    • +
    • MATLAB® R2021a or later if using Azure Data Explorer

    • +
    +
  • +
  • 3rd party products (Required to build the Azure SDK jar file)

    +
      +
    • Maven™ 3.6.1 or later

    • +
    • JDK v8 or greater and less than v18

    • +
    +
  • +
+
+
+

Documentation

+

The primary documentation for this package is available at: https://mathworks-ref-arch.github.io/matlab-azure-services

+
+
+

Usage

+

Once installed +the interface can be added to the MATLAB path by running startup.m from the Software/MATLAB directory. +Also refer to configuration and authentication details below.

+
+
+

Azure Data Lake Storage Gen2 examples

+
+

Create a Blob Client and check if a blob exists

+
blobClient = createStorageClient('ContainerName','myContainer','BlobName','myBlob') 
+tf = blobClient.exists();
+
+
+
+
+

Acquire a lease for a blob

+
builder = azure.storage.blob.specialized.BlobLeaseClientBuilder;
+builder = builder.blobClient(blobClient);
+% Build the BlobLeaseClient
+leaseClient = builder.buildClient();
+% Acquire a lease for 30 seconds
+leaseId = leaseClient.acquireLease(30)
+
+
+
+
+

Create Queue Service Client and create a queue

+
queueServiceClient = createStorageClient('Type','QueueService');
+queueClient = queueServiceClient.createQueue('myqueuename');
+
+
+
+
+

Create File Data Lake (file) Client and check if the file exists

+
dataLakeFileClient = createStorageClient('FileSystemName','myFileSystem',...
+               'FileName','my/dir/file');
+tf = dataLakeFileClient.exists();
+
+
+

For further details see: Azure Data Lake Storage Gen2

+
+
+
+

Azure Key Vault

+
+

Create a Secret Client and get a secret value

+
secretClient = createKeyVaultClient('Type','Secret');
+% Get the secret using its name
+secret = secretClient.getSecret('mySecretName');
+% Get the secret value
+secretValue = secret.getValue();
+
+
+
+
+

List keys in a vault

+
% Create a client
+keyClient = createKeyVaultClient('Type','Key');
+% Get an array of secret properties
+properties = keyClient.listPropertiesOfKeys();
+% Get the name property for the first entry
+name = propList(1).getName();
+
+
+

For further details see: Azure Key Vault

+
+
+
+

Azure Data Explorer

+

This package provides access to Azure Data Explorer related features from within MATLAB. +Lower-level interfaces to the Azure Data Explorer REST APIs are provided along with +some higher-level interfaces for common tasks. +The Control plane REST API client is automatically generated based upon the OpenAPI spec. +provided in https://github.com/Azure/azure-rest-api-specs/tree/main/specification.

+
+

Return “Hello World” using a Kusto query

+
>> [result, success] = mathworks.adx.run('print myColumn="Hello World"')
+result =
+  table
+      myColumn    
+    _____________
+    "Hello World"
+success =
+  logical
+   1
+
+
+
+
+

A query to count the number of rows in a table

+
>> rowCount = mathworks.adx.run(sprintf("myTableName | count", tableName))
+rowCount =
+  table
+    Count 
+    ______
+    123523
+
+
+
+
+

Return some rows in a table

+
>> firstRows = mathworks.adx.run("myTableName | take 5")
+firstRows =
+  5x27 table
+       Date        DayOfWeek          DepTime                CRSDepTime
+    ___________    _________    ____________________    ____________________
+    21-Oct-1987        3        21-Oct-1987 06:42:00    21-Oct-1987 06:30:00
+    26-Oct-1987        1        26-Oct-1987 10:21:00    26-Oct-1987 10:20:00
+    23-Oct-1987        5        23-Oct-1987 20:55:00    23-Oct-1987 20:35:00
+    23-Oct-1987        5        23-Oct-1987 13:32:00    23-Oct-1987 13:20:00
+    22-Oct-1987        4        22-Oct-1987 06:29:00    22-Oct-1987 06:30:00
+
+
+
+
+
+

Configuration & authentication

+

While the packages share some common configuration and authentication code they +also have separate configuration details to record preferred default endpoints +and authentication methods.

+
+

Azure Data Lake Storage Gen2 & Azure Key Vault setup

+

First change to the matlab-azure-services/Software/MATLAB directory and run the +startup command to configure paths.

+

The package offers a loadConfigurationSettings function which allows reading +configuration settings from a short JSON format file. This offers a convenient +way for you to configure various settings (like endpoint URLs) as well as +authentication configurations without having to hardcode these into your MATLAB +code. For more details see: Configuration

+

Virtually all interactions with Azure will require some form of authentication. +The package offers various Builder classes as well as a higher-level function +configureCredentials to aid performing the authentication. For more details +see: Authentication

+
+
+

Azure Data Explorer setup

+

First change to the matlab-azure-services/Software/MATLAB directory and run the +startup command to configure paths.

+

Initially run mathworks.adx.buildSettingsFile, to configure credentials & settings. +For more details see: ADXAuthentication.md. +A number of authentication methods are supported.

+

Assuming Client Secret authentication, the simplest to configure, this should result +in a file: Software/MATLAB/config/adx.Client.Settings.json similar to:

+
{
+    "preferredAuthMethod" : "clientSecret",
+    "subscriptionId" : "<REDACTED>",
+    "tenantId" : "<REDACTED>",
+    "clientId" : "<REDACTED>",
+    "clientSecret" : "<REDACTED>",
+    "database" : "<defaultDatabaseName>",
+    "resourceGroup": "<resourceGroupName>",
+    "cluster" : "https://<defaultClusterName>.<region>.kusto.windows.net"
+}
+
+
+
+
+
+

License

+

The license for the MATLAB Interface for Azure Services is available in the +License.txt file in this repository. This package uses certain +third-party content which is licensed under separate license agreements. +See the pom.xml in the Software/Java directory of this package for details of +third-party software downloaded at build time.

+
+
+

Enhancement Request

+

Provide suggestions for additional features or capabilities using the following +link: https://www.mathworks.com/products/reference-architectures/request-new-reference-architectures.html

+
+
+

Support

+

Please create a GitHub issue.

+

Microsoft Azure Data Explorer, Azure Data Lake Storage & Azure Key Vault are trademarks of the Microsoft group of companies.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Performance.html b/Documentation/html/Performance.html new file mode 100644 index 0000000..c214156 --- /dev/null +++ b/Documentation/html/Performance.html @@ -0,0 +1,256 @@ + + + + + + + Performance — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Performance

+

This package uses the GSON Java library for +comprehensive JSON parsing, however this can have a performance impact when working +with queries that return large responses. If response times are slow and bandwidth +is not the issue the following should be considered:

+
    +
  • In general only KQL queries should return sufficient volumes of data to exhibit +query times that dominate the inherent communication time.

  • +
  • Return the minimum amount of data.

  • +
  • Where convenient to do so structure queries to perform data formatting and +filtering on the server side. This takes advantage of the proximity to the data +and the scale of the Azure Data Explorer platform.

  • +
  • Ingesting from files or tables uses binary transfers, typically with optimized +binary parquet files, for larger volumes of data this is far more efficient than +repeated inline ingestion of small amounts of data.

  • +
  • Simple JSON responses may be parsed faster using a custom row decoder, see below +for more details.

  • +
  • Return int32s rather than int64s if precision is not a limitation.

  • +
  • Avoid supporting nulls data if data is know to not have null values. See: +NullData for more details.

  • +
  • The MATLAB profiler +can be a good way to visualize what portions of query processing are consuming most time.

  • +
  • If responses contain dynamic fields where not all values returned +may be used consider decoding them at the time of use as needed rather than as +part of the query.

  • +
  • If getting direct access to the raw data return in response is required, this +can be accomplished using the lower-level functions.

  • +
+
+

Parallel Processing

+

If Parallel Computing Toolbox is installed (use ver to check), then it can be +used to speed up the processing of KQL query rows. Use the optional useParallel +argument to enable this (default is false). Additionally a threshold of rows +can be applied below which Parallel processing will not be used. The default is 1000. +The best value for this threshold will depend on the content of the rows and whether +repeated large row count calls are made, some experimentation may be required. +This can also be used with custom row decoders. The default row decoder requires +a process based parpool.

+

Here a parallel processing is enabled along with a custom row decoder, parallelism is applied for +queries returning 10000 rows or more.

+

Example:

+
h = @mathworks.internal.adx.exampleCustomRowDecoder;
+[result, success] = mathworks.adx.run(query, useParallel=true, parallelThreshold=10000, customRowDecoder=h);
+
+
+
+
+

Custom row decoder

+

If queries result in a simple JSON response then writing a custom decoder to +extract the required data rather than using the default decoder.

+

A sample of such a decoder /Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m +is provided. This function handles an array of rows of the form: [128030544,1.0,"myStringValue-1"] +with fields of types int64, double and a string.

+

It will not process other data and is intended for speed rather than strict correctness or robustness.

+

The custom decoder is applied to the PrimaryResult rows field only.

+

It is required to return a cell array of size number of rows by the number of +columns that can be converted to a MATLAB table with the given schema.

+

It is not required to respect input arguments flags if foreknowledge of returned +data permits it.

+

Custom row decoders can be applied to progressive and nonprogressive KQL API v2 +and KQL API v1 mode queries.

+

When a custom decoder is not used the generic decoder mathworks.internal.adxgetRowsWithSchema +is used.

+

A function handle +is used to pass a handle to the custom row decoder to the run or KQLquery commands.

+

Example:

+
query = sprintf('table("%s", "all")', tableName);
+crd = @mathworks.internal.adx.exampleCustomRowDecoder;
+[result, success] = mathworks.adx.run(query, customRowDecoder=crd);
+
+
+

The exampleCustomRowDecoder example implements a Parallel Computing based parfor +based parallelization, this is not required but may be helpful.

+
+

Depending on the nature of the decoder code a process based pool may be required +rather than a thread based pool. +It is unlikely that a decoding process would benefit from a remote processing via +a cluster based pool but this would be possible.

+
+
+
+

doNotParse parallel array processing (Experimental)

+

A JSON array of doNotParse values being processed by JSONMapper must be checked +for paired double quotes added to some value types the gson toString method. +While trivial this can be slow if there are many elements for example, row values.

+

An experimental flag (useParallel) can be set to true to enable parallel +processing of this step using parfor if Parallel Computing Toolbox is available. +The property can be set in: /Software/MATLAB/app/system/+adx/+control/JSONMapper.m +in the fromJSON method.

+
+
+

Skip parsing row array elements (skipRowsArrayDecode)

+
+

The following applies to v2 queries only.

+
+

While the Rows array elements are not parsed by the the generation of a adx.data.models.QueryV2ResponseRaw +in a adx.data.api.Query.queryRun call prior to the generation of a MATLAB table, +as done by the higher-level mathworks.adx.KQLQuery function, the array +itself is parsed.

+

If the optional named argument skipRowsArrayDecode is used with a adx.data.api.Query.queryRun +call then the frames are parsed but the Rows array itself is not. This enables +If parsing the Rows independently if needed in a performance optimal way.

+

Example:

+
% Create a request
+request = adx.data.models.QueryRequest();
+request.csl = "mytablename | take  100";
+
+% Create the Query object and run the request
+query = adx.data.api.Query();
+[code, result, response, id] = query.queryRun(request, apiVersion="v2", skipRowsArrayDecode=true);
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Queue.html b/Documentation/html/Queue.html new file mode 100644 index 0000000..1a6e420 --- /dev/null +++ b/Documentation/html/Queue.html @@ -0,0 +1,287 @@ + + + + + + + Queue Storage — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Queue Storage

+

QueueStorage is designed to provide durable message queueing for large +workloads. This package provides a low-level interface to queue storage and +provides capabilities not available in shipping MATLAB. This package supersedes +a previously published blob storage low-level interface +https://github.com/mathworks-ref-arch/matlab-azure-blob. +Specifically this interface target’s Gen2 storage APIs and the Azure® v12 SDK +rather than the previous generation of APIs and the v8 SDK. While older +interface referenced above provides some forward compatibility with Gen2 it is +strongly recommended that this interface be used when working with Gen2 blob +storage. While conceptually quite similar the APIs are not backwardly compatible +as a consequence of significant changes in the underlying Azure APIs.

+
+

Queue Clients

+

The concept of a Client is central to how queue storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy:

+
    +
  1. QueueServiceClient - This highest level client addresses the level of +queue service itself.

  2. +
  3. QueueClient - The lowest level client supports operations at the queue +level.

  4. +
+

Client objects are created and configured using corresponding Builder objects. +There is overlap in functionality between the various clients and there may +often be more than one way to accomplish a given operation.

+

Detailed information on the underlying client APIs can be found here: Queue Client SDK. +This interface exposes a subset of the available functionality to cover common +use cases in an extensible way.

+

A higher-level function createStorageClient() is provided to help build the +various clients.

+
+
+

createStorageClient function

+

See the createStorageClient description for more details.

+
+
+

Queue Service Client

+

A QueueServiceClient can be created using createStorageClient as +follows:

+
qsc = createStorageClient('Type','QueueService');
+
+
+

or build on a lower level using QueueServiceClientBuilder:

+
% Create the client's builder
+builder = azure.storage.queue.QueueServiceClientBuilder();
+
+% configureCredentials is a function that simplifies creating a credentials
+% argument for the client's builder. In this case a Connection String is used to
+% authenticate. Other authentication methods may required different build steps,
+% e.g. setting an endpoint
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+builder = builder.connectionString(credentials);
+
+builder = builder.httpClient();
+qsc = builder.buildClient();
+
+
+
+

Common Service Client operations

+

For a full list of supported service client methods consult the API +documentation or call methods() on the client object or see the +APIReference.md file.

+
% Create a Queue & its client
+queueClient = qsc.createQueue('myqueuename');
+
+
+
% List queues
+qList = qsc.listQueues();
+
+
+
% Delete a Queue & its client
+qsc.deleteQueue('myqueuename');
+
+
+
+
+
+

Queue Client

+

A QueueClient is created as follows:

+
% Create using createStorageClient
+qc = createStorageClient('QueueName','myquename-123456');
+
+
+

or:

+
% Create the Client's builder
+builder = azure.storage.queue.QueueClientBuilder();
+
+credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json'));
+
+builder = builder.connectionString(credentials);
+builder = builder.httpClient();
+builder = builder.queueName("myquename-123456");
+qc = builder.buildClient();
+    
+
+
+
+

Common Queue Client operations

+
% Send a message
+msgResult = qc.sendMessage('my test message');
+receipt = msgResult.getPopReceipt;
+
+
+
% Get insertion, expiration & next visible times
+insertTime = msgResult.getInsertionTime();
+expireTime = msgResult.getExpirationTime();
+visibleTime = msgResult.getTimeNextVisible();
+
+
+
% Receive a message
+msg = qc.receiveMessage();
+
+
+
% Get insertion, expiration & next visible times
+insertTime = msg.getInsertionTime();
+expireTime = msg.getExpirationTime();
+visibleTime = msg.getTimeNextVisible();
+
+
+
% Get the message count, id and receipt
+count = msg.getDequeueCount();
+id = msg.getMessageId();
+receipt = msg.getPopReceipt;
+
+
+
% Get the message text itself
+text = msg.getMessageText();
+
+
+
% Clear all or delete a single message
+qc.clearMessages();
+qc.deleteMessage(id, receipt);
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/README.html b/Documentation/html/README.html new file mode 100644 index 0000000..101f3ac --- /dev/null +++ b/Documentation/html/README.html @@ -0,0 +1,155 @@ + + + + + + + MATLAB Interface for Azure Services — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

MATLAB Interface for Azure Services

+

Refer to the HTML documentation for the latest version of this help information with enhanced navigation, discoverability, and readability.

+

https://mathworks-ref-arch.github.io/matlab-azure-services

+
+

Contents

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2020-2024, MathWorks, Inc..

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/References.html b/Documentation/html/References.html new file mode 100644 index 0000000..f34eb17 --- /dev/null +++ b/Documentation/html/References.html @@ -0,0 +1,159 @@ + + + + + + + References — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

References

+

In general the MATLAB interfaces follow the same design as the Azure® SDK for +Java. Thus it can be helpful to also consult the Azure SDK for Java documentation +to learn more about specific client interfaces, methods and authentication workflows.

+
+

Azure Storage

+ +
+
+

Azure Authentication

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/Testing.html b/Documentation/html/Testing.html new file mode 100644 index 0000000..fa177cd --- /dev/null +++ b/Documentation/html/Testing.html @@ -0,0 +1,375 @@ + + + + + + + Unit Tests — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Unit Tests

+

The package includes various MATLAB® Unit Tests for testing the different +interfaces and clients for the different Azure® services. These tests can be +found in Software/MATLAB/test/unit and they are further split into directories +for different Azure services as well as a Common directory:

+
    +
  • /Common

  • +
  • /KeyVault

  • +
  • /Storage

  • +
  • /Adx

  • +
+

The unit tests for the different services may have different requirements. These +are documented on a per service basis below.

+

Typically the tests will require an Azure App Registration with certain specific +permissions and a service specific resource with specific content and which is +accessible by the App’s service principal. Details like the App Client ID, +Client Secret, Resource Account Name, etc. which can contain sensitive data, are +provided to the unit tests through environment variables. This also allows the +Unit Tests to be more securely included in CI/CD systems where one can typically +configure variables in a protected and secure way (e.g. through “Actions +secrets” on GitHub or “Masked/Protected Variables” on GitLab, etc.).

+

It may be possible to use one single App for all different features. This App +will then have to meet all the requirements listed in the sections below. Even +with one App, it is still required to set/provide AZURE_CLIENT_ID, +KEYVAULT_CLIENT_ID, etc. separately but they could then all have the same +value to point to the same App.

+

Some tests cannot run non-interactively (e.g. authentication tests which require +user interaction). These tests are automatically skipped if environment variable +GITLAB_CI=true is set.

+
+

/Common unit tests

+

Common tests various common features like authentication and networking +features like proxy settings.

+
+

NOTE: the common features cannot be tested entirely independently, to be +properly tested, the credentials or network configuration, etc. also need to +be passed to at least one service specific client which is then interacted +with. The Common unit tests, test against BlobServiceClient, +BlobContainerClient, BlobClient, QueueServiceClient and QueueClient +which are all Storage Data Lake Storage Gen2 related client. Hence these +tests also require a storage account resource and corresponding environment +variables.

+
+
+

Common Azure App Registration

+

Configure an Azure App for which a Client Secret has been generated and a +Client Certificate has been registered. Ensure this App’s service principal +is granted access to the storage account used for testing, see also +Storage Account below. And if also running the +interactive authentication tests make sure that for this App:

+
    +
  • A Redirect Uri has been configured in the form of http://localhost:PORT +where PORT is configurable.

  • +
  • Allow public client flows is enabled.

  • +
  • https://storage.azure.com/user_impersonation API permissions have been +configured.

  • +
+
+
+

Azure CLI

+

In order to be able to test Azure CLI credentials, Azure CLI must have been +installed and a user must have have already successfully logged in using az login.

+
+

NOTE: The Azure CLI authentication test is skipped when +GITLAB_CI=true.

+
+
+
+

Common Storage Account

+

Configure a storage account as discussed under Storage Storage Account.

+

When also running the interactive tests (including Azure CLI test), the +interactive user which you are logging in as, will also require Contributor, +Storage Blob Data Contributor and Storage Queue Data Contributor roles on +the storage account.

+
+
+

Common environment variables

+ + + + + + + + + + + +

Variable Name

Description

COMMON_REDIRECT_URI

Redirect URI as configured for App

+

As well as the Storage environment variables below.

+
+
+
+

/Storage Azure Data Lake Storage Gen2 unit tests

+
+

Azure App Registration

+

In order to be able to run the Storage tests an App registration is required for +which:

+
    +
  • A Client Secret has been generated.

  • +
+
+
+

Storage Account

+

The storage account should contain three containers:

+
    +
  • containerempty which should be empty

  • +
  • containernotempty which should contain two blobs blob1.txt and +blob2.txt.

  • +
  • leasetest which should contain a blob file1.txt.

  • +
+

Further, make sure that the App’s service principal is assigned Contributor, +Storage Blob Data Contributor as well as Storage Queue Data Contributor +roles on this account.

+
+
+

Connection String/SAS Token

+

Under “Shared access signature” generate a signature with:

+
    +
  • Allowed Services: “Blob” and “Queue”

  • +
  • Allowed resource types: “Service”, “Container” and “Object”.

  • +
  • Allowed permissions: All

  • +
+

Choose an appropriate expiry date/time; Azure by default appears to suggest a +period of 6 hours which is relatively safe but not very convenient for testing. +Since the account should really only be used for testing anyway and should +not be used to store any sensitive data, it may be acceptable to significantly +increase the validity period in accordance with local security polices.

+

Similarly one can configure specific allowed IP addresses.

+

Once generated note down the “Connection string” and “SAS token”.

+
+
+

Storage environment variables

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Variable Name

Description

STORAGE_CONNECTION_STRING

“Connection string” obtained above

STORAGE_ACCOUNT_KEY

“SAS token” obtained above

STORAGE_ACCOUNT_NAME

Name of the storage account

AZURE_CLIENT_ID

Client ID of the Azure App

AZURE_CLIENT_SECRET

Client Secret which has been generated for the App

AZURE_CLIENT_CERTIFICATE

Base64 encoded PEM-format certificate as registered for the App

AZURE_TENANT_ID

Azure Tenant ID

+
+
+
+

/KeyVault Azure Key Vault unit tests

+

All KeyVault Unit Tests are performed using Client Secret authentication. There +are no interactive tests.

+
+

Key Vault Azure App Registration

+

In order to be able to run the Key Vault tests an App registration is required +for which:

+
    +
  • A Client Secret has been generated.

  • +
+
+
+

Key Vault Account

+

A Key Vault account needs to exist:

+
    +
  • On which soft-delete is enabled.

  • +
  • For a Key Vault with “Azure role-based access control” permissions model, the +App’s service principal must be assigned Key Vault Administrator role. For a +Key Vault working with “Vault access policy” permission model the service +principal must have been granted all Key Management Operations and Secret Management Operations permissions.

  • +
  • In which a secret named anakin with value darth needs to exist.

  • +
  • In which a RSA key named kvtestkey must exist (key size and actual value are +irrelevant).

  • +
+
+
+

KeyVault environment variables

+ + + + + + + + + + + + + + + + + + + + +

Variable Name

Description

KEYVAULT_CLIENT_ID

Client ID of the Azure App

KEYVAULT_CLIENT_SECRET

Client Secret which has been generated for the App

KEYVAULT_TENANT_ID

Azure Tenant ID

KEYVAULT_VAULT_NAME

Name of the Key Vault

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/_sources/ADXAuthentication.md.txt b/Documentation/html/_sources/ADXAuthentication.md.txt new file mode 100644 index 0000000..15fdfa6 --- /dev/null +++ b/Documentation/html/_sources/ADXAuthentication.md.txt @@ -0,0 +1,87 @@ +# Authentication + +To create a settings file interactively use: `mathworks.internal.adx.buildSettingsFile`. + +Template JSON configuration files for various authentication approaches can be +found in `matlab-azure-adx/Software/MATLAB/config` + +In general for initial testing Client Secret based authentication is the simplest +to configure an work with. To use other approaches it is recommended to contact +MathWorks®: . + +Certain authentication methods require the additional use of the Azure Java SDK +authentication support as documented in [Authentication.md](Authentication.md). + +| Authentication Method | JSON file field value | Java SDK support required | +|:----------------------|:----------------------|:-------------------------:| +| Client Secret | clientSecret | No | +| Interactive Browser | interactiveBrowser | Yes | +| Device Code | deviceCode | Yes | +| Managed Identity | managedIdentity | Yes | + +If you wish to use an Azure authentication method that is not listed please contact MathWorks at: . + +## Settings file fields + +The default settings file is: `matlab-azure-adx/Software/MATLAB/config/adx.Client.Settings.json` +Alternative names and paths can be used if required. +Depending on the authentication method used different fields are required. The +template files for the documented methods show the fields for the various methods. + +For example Interactive Browser uses: + +```json +{ + "preferredAuthMethod" : "interactiveBrowser", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} +``` + +In use the fields `controlBearerToken` and `dataBearerToken` will be added to the file +to cache the short lived bearer token values the control and data planes. These values are sensitive and should not be exposed. + +| Field name | Description | +|:--------------------|:------------| +| preferredAuthMethod | Indicated the authentication approach to use, e.g. clientSecret | +| tenantId | Azure tenant ID | +| subscriptionId | Azure subscriptions ID | +| clientId | ID of the Application Registration used to connect to ADX | +| clientSecret | Secret value corresponding to the clientId, this value is sensitive and should not be exposed | +| resourceGroup | Azure resource group containing the ADX instance | +| database | Default database name to use | +| cluster | Default cluster name to use | + +## Client Secret + +Client Secret authentication is sometimes referred to as "Application Secret" as the +secrets created apply to Application Registrations. This package uses the term "Client +Secret or `clientSecret`as appropriate. + +Client secret does not use the "Secret ID" value and it should not be confused with the +Client ID (sometimes called the App ID) or the Client Secret itself. + +## BaseClient extension + +The file `matlab-azure-adx/Software/MATLAB/app/system/+adx/+control/BaseClient.m` +implements the base client for the interface's API call classes. +In this file there are well commented hook points to which custom authentication +code can be integrated if required. This topic should be discussed with MathWorks +to clarify is custom code is necessary. + +## Bearer Tokens + +The lower-level `+api` classes and some higher-level functions accept an optional +argument `bearerToken` directly if the authentication process to obtain the token +is handled by some external means. Note that the KQL queries and management commands +will require different tokens as they use different endpoints. + +## References + +* Azure Services authentication [https://github.com/mathworks-ref-arch/matlab-azure-services/blob/main/Documentation/Authentication.md](https://github.com/mathworks-ref-arch/matlab-azure-services/blob/main/Documentation/Authentication.md) + +[//]: # (Copyright 2023-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/ADXGettingStarted.md.txt b/Documentation/html/_sources/ADXGettingStarted.md.txt new file mode 100644 index 0000000..e29e283 --- /dev/null +++ b/Documentation/html/_sources/ADXGettingStarted.md.txt @@ -0,0 +1,551 @@ +# Getting Started + +Azure Data Explorer (ADX) commands can be broadly separated into two classes: + +* Data queries, which transact data on the platform +* Control queries, which relate to the platform itself + +This document will describe some examples of each and how they are structured. +It does not attempt to cover the complete KQL syntax or all of the control options +that are available. For further detailed refer to the [API reference](ADXAPI.md) +and Azure's documentation. + +The following examples assume that the package has previously been configured with +connection and authentication details, see: [ADXAuthentication](ADXAuthentication.md). + +The REST API interface used by this package can be somewhat verbose in some cases +once familiar with its behavior it is generally straightforward to create wrapper +functions in MATLAB that more concisely address a task. Some such reference implementations +are provided. + +> MathWorks reserves the `internal` namespace and functions within this namespace +> are subject to change or removal without notice and should not be used. + +## Data queries + +### Hello World KQL query + +#### `run` command + +The following reference implementation `mathworks.adx.run` is a high-level +wrapper that abstracts the different types of queries under a generic `run` method. +For more advanced use cases it may be required to drop to the lower-level interfaces +described below. + +The query requests that "Hello World" be printed. This is returned as a table with +a column names "mycol". the success value is a logical indicating success of the +call or not, additional optional outputs are not displayed in this example: + +```matlabsession +>> [result, success] = mathworks.adx.run('print mycol="Hello World"') +result = + table + mycol + _____________ + "Hello World" +success = + logical + 1 +``` + +To get the contents of an entire table once can run the following command, here Parallel +processing of the resulting data has been enabled (if available), with a threshold +of 10000 rows of data. For more details on optimization see: [Performance.md](Performance.md). + +```matlabsession +[result, success] = mathworks.adx.run('table("tableName", "all")', , useParallel=true, parallelThreshold=10000) +``` + +#### `KQLQuery` command + +At a lower-level the above run command in this case calls the `KQLQuery` reference +implementation, here we also display the `requestId` which can be used for corelation: + +```matlabsession +>> [result, success, requestId] = mathworks.adx.KQLQuery('print mycol="Hello World"') + +result = + table + mycol + _____________ + "Hello World" + +success = + logical + 1 + +requestId = + "4faa0b41-e308-4436-a113-376aa20da525" +``` + +#### REST interface + +At a still lower-level one can work with the REST interface more directly. +A `adx.data.models.QueryRequest` request object is first created. The `.db` property +is configured with the database name of interest. If not provided a default, if set, +will be read from the configuration file. The query itself `print Test="Hello World"` +is assigned to the `.csl` property. In this case no request properties are assigned +to the `propertiesProp` property. This will be used in a later example. + +```matlabsession +% build a request object +req = adx.data.models.Query +Request; +req.db = "mydatabasename"; +req.csl = 'print Test="Hello World"' +req = +QueryRequest with properties: + + csl: "print mycol="Hello World"" + db: "mydatabasename" + propertiesProp: [] +``` + +The ADX cluster is assigned and with it a default scope. A default cluster and scope +can be set in the configuration to avoid setting them for exact query and or having +the values appear in source code. The ADX configuration may require that multiple +scopes would be set. + +```matlabsession +% Configure a cluster and scope, defaults to be read from configuration files in future +cluster = "https://myclustername.myregion.kusto.windows.net"; +scopes = ["https://myclustername.myregion.kusto.windows.net/.default"]; +``` + +Now a `adx.data.api.Query` query object is created using the scope(s). + +```matlabsession +% Create a query object +query = adx.data.api.Query('scopes', scopes); +query = +Query with properties: + + serverUri: [0×0 matlab.net.URI] + httpOptions: [1×1 matlab.net.http.HTTPOptions] + preferredAuthMethod: [0×0 string] + bearerToken: '' + apiKey: '' + httpCredentials: '' + apiVersion: "2022-11-11" + subscriptionId: '' + tenantId: '' + clientSecret: '' + clientId: '' + scopes: "https://myclustername.myregion.kusto.windows.net/.default" + cookies: [1×1 adx.CookieJar] + +``` + +Having configured the query object it can now be run the request that was previously +created on a given cluster, if a default is not used: + +```matlabsession +[code, result, response] = query.queryRun(req, cluster) + +code = + StatusCode enumeration + OK +result = + 1×5 QueryV2ResponseRaw array with properties: + + FrameType + Version + IsProgressive + TableId + TableKind + TableName + Columns + Rows + HasErrors + Cancelled + OneApiErrors + +response = + ResponseMessage with properties: + + StatusLine: 'HTTP/1.1 200 OK' + StatusCode: OK + Header: [1×11 matlab.net.http.HeaderField] + Body: [1×1 matlab.net.http.MessageBody] + Completed: 0 +``` + +Assuming success the result is a number of *Frames* that describe and contain tabular data. +This data can be converted to native MATLAB tables for ease of use. +Three tables are returned 2 containing metadata and a 3rd containing the data of, +interest, it is named the `PrimaryResult`. + +```matlabsession +tables = mathworks.internal.adx.queryV2Response2Tables(result) +tables = + 3×1 cell array + {1×3 table} + {1×1 table} + {3×12 table} +>> tables{1}.Properties.Description +ans = + '@ExtendedProperties' +>> tables{2}.Properties.Description +ans = + 'PrimaryResult' +>> tables{3}.Properties.Description +ans = + 'QueryCompletionInformation' +>> tables +``` + +Looking at the `PrimaryResult` shows the response to the query: + +```matlabsession +>> tables{2} +ans = + table + mycol + _______________ + "Hello World" +``` + +Putting the commands together: + +```matlab +% build a request object +request = adx.data.models.QueryRequest(); +colName = "myOutput"; +message = "Hello World"; +% set the KQL query +request.csl = sprintf('print %s="%s"', colName, message); +% Don't set the database use the default in .json config file +% request.db = "myDatabaseName" +% No adx.data.models.ClientRequestProperties required +% request.requestProperties +% Create the Query object and run the request +query = adx.data.api.Query(); +% The default cluster to use is configured using a .json configuration file +% Run the query: +[code, result, response] = query.queryRun(request); %#ok +if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); +else + error('Error running query: %s', request.csl); +end +``` + +### Configuring request properties, to use tSQL using the low-level interface + +The higher-level interface `mathworks.adx.tSQLQuery` automatically configures +the required request property to enable tSQL. However, as an example of how properties +can be configured directly using the lower level the following example is illustrative. +Note the `KQLQuery` and `run` commands both accept properties as optional arguments. + +If not using the KQL language syntax the the *T-SQL* syntax can be used to write +queries. This is accomplished the query property `query_language` to `sql`. + +```matlab +request = adx.data.models.QueryRequest(); +request.csl = query; +% Don't set the database use the default in .json config file +% request.db = "databaseName"; + +% Configure ClientRequestPropertiesOptions & then ClientRequestProperties +crpo = adx.data.models.ClientRequestPropertiesOptions; +crpo.query_language = "sql"; +crp = adx.data.models.ClientRequestProperties(); +crp.Options = crpo; +request.requestProperties = crp; + +% Create the Query object and run the request +query = adx.data.api.Query(); +[code, result, response] = query.queryRun(request); +``` + +A reference implementation shows how this can be more concisely used: + +```matlab +% Run the SQL query 'SELECT top(10) * FROM mytable' to return the 1st 10 row of a table +[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.tSQLQuery('SELECT top(10) * FROM mytable') +``` + +The additional return values can be used to indicate if the query failed: + +```matlab +if dataSetCompletion.HasErrors || dataSetCompletion.Cancelled + error("Query had errors or was cancelled"); +end +``` + +### Count the rows in a table, using the lower level interfaces + +A query to count the rows in a table using KQL syntax: + +```matlab +req = adx.data.models.QueryRequest; +req.csl = "['mytable'] | count"; + +q = adx.data.api.Query(); +[code, result, response] = q.queryRun(req); %#ok +if code == matlab.net.http.StatusCode.OK + [result, resultTables] = mathworks.internal.adx.queryV2Response2Tables(result); + count = result.Count; +end +``` + +In more detail, this example is based on a table created from the `airlinesmall.csv` +data set that is included with matlab use `which('airlinesmall.csv')` to get its +location. The result returned should be: 123523. + +> Note that in early releases some warnings about unsupported data types and conversions may be expected. + +```matlabsession +% Create a request +req = adx.ModelsDataPlane.QueryRequest; +req.db = "mydatabasename"; +% The table name is: airlinesmallcsv; +% Kusto query string to count the rows in a given table +req.csl = "['airlinesmallcsv'] | count"; + +scopes = ["https://myclustername.myregion.kusto.windows.net/.default"]; +cluster = "https://myclustername.myregion.kusto.windows.net"; + +q = adx.data.api.Query('scopes', scopes); +[code, result, response] = queryRun(q, req, cluster); + +tables = + 3×1 cell array + {1×3 table} + {1×1 table} + {3×12 table} +ans = + table + Count + ______ + 123523 +c = + int64 + 123523 +ans = + 'int64' +``` + +### Progressive query execution + +To execute a query in progressive mode the query request option property `results_progressive_enabled` +should be set to true. + +```matlab +query = "['tableName '] | take " + 100; +args = {"database", database "propertyNames", "results_progressive_enabled", "propertyValues", {true}, "verbose", false}; +[result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); +``` + +### Get a list of tables + +Get a list of tables and table properties: + +```matlab +req = adx.data.models.QueryRequest('db', 'mydatabase', 'csl', '.show tables details'); +[code, result, response] = q.queryRun(req); +``` + +Or more concisely: + +```matlab +tableList = mathworks.adx.listTables(database="mydatabase") +``` + +### Export data to a local parquet file + +The following example code exports an entire table to a known blob using +a Shared Access Signature blob URL. The resulting parquet file can be read +into a MATLAB table using `parquetread`. Parquet is recommended over CSV and +other formats for speed and data integrity reasons. + +```matlab +exportURL = "https://myaccount.blob.core.windows.net/"; +exportURI = matlab.net.URI(exportURL); +SAS = exportURI.EncodedQuery; +query = "table('mytableName', 'all')"; +[tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query); +if ~tf + error("exportToBlob failed"); +end + +downloadURL = result.Path(1) + "?" + SAS; +downloadURI = matlab.net.URI(downloadURL); +localFile = websave("exportedTable.gz.parquet", downloadURI); +T = parquetread(localFile); +``` + +### Ingest a table from a local a table + +To ingest large volumes of data from MATLAB then the `ingestFile` and `ingestTable` +functions can be used: + +```matlab +% Read some sample data from a parquet file to create a MATLAB table +inputTable = parquetread(parquetFile); +% Ingest the table into a given table +[success, result] = mathworks.adx.ingestTable(inputTable, tableName=tableName); +``` + +To ingest small amounts of data from a MATLAB variable, typically a table the +`ingestInline`. This function is not suitable for bulk data or high performance +requirements. + +```matlab +localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); +tableName = "outages"; +praquetTable = parquetread(localPath); +ingestData = praquetTable(1,:); + +[success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData) + +success = + logical + 1 +result = + 1x5 table + ExtentId ItemLoaded Duration HasErrors OperationId + ______________________________________ _____________________________________________ ________ _________ ______________________________________ + "8de6b799-6e12-4994-b57b-ed75e15db0a8" "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf" 00:00:00 false "cd4184ca-0d31-4c42-a273-5f2953f76ddf" +requestId = + "63bb1cea-b589-45ac-82ad-00d68ca96aeb" +extentId = + "8de6b799-6e12-4994-b57b-ed75e15db0a8" +``` + +To ingest from another source in ADX itself rather than MATLAB see `ingestFromQuery`. + +### Higher-level data handling functions + +The following higher-level functions are provided to assist in common operations when working with data. +Use `doc mathworks.adx.` for more details. + +* createTable - Creates a table in a given database +* dropTable - Drops a table from a given database +* exportToBlob - Exports data to an Azure blob +* ingestFile - Ingests a local file to Azure Data Explorer using Azure blob +* ingestFileQueue - Ingests a local file to Azure Data Explorer using Azure blob & queue *(work in progress, do not use)* +* ingestTable - Ingests a MATLAB table to an Azure Data Explorer Table +* ingestTableQueue - Ingests a MATLAB table to an Azure Data Explorer Table *(work in progress, do not use)* +* ingestInline - Ingests limited amounts of data into Kusto directly from MATLAB +* ingestFromQuery - Ingest data using the result of a command or query +* listTables - Returns a list of tables and their properties +* tableExists - Returns true is a given table exists + +## Control queries + +### List Clusters + +Start by creating a `Clusters` object: + +```matlabsession +>> clusters = adx.Api.Clusters +clusters = + Clusters with properties: + + serverUri: [0×0 matlab.net.URI] + httpOptions: [1×1 matlab.net.http.HTTPOptions] + preferredAuthMethod: [0×0 string] + bearerToken: '' + apiKey: '' + httpCredentials: '' + apiVersion: "2022-11-11" + subscriptionId: '' + tenantId: '' + clientSecret: '' + clientId: '' + cookies: [1×1 adx.CookieJar] +``` + +Call the `clustersList` method: + +```matlabsession +>> [code, result, response] = clusters.clustersList +code = + StatusCode enumeration + OK +result = + ClusterListResult with properties: + + value: [1×1 adx.Models.Cluster] +response = + ResponseMessage with properties: + + StatusLine: 'HTTP/1.1 200 OK' + StatusCode: OK + Header: [1×13 matlab.net.http.HeaderField] + Body: [1×1 matlab.net.http.MessageBody] + Completed: 0 + +``` + +Examine the result, in this case there is one cluster: + +```matlabsession +>> result.value +ans = + Cluster with properties: + + sku: [1×1 adx.Models.AzureSku] + systemData: [0×0 adx.Models.systemData] + zones: "1" + identity: [1×1 adx.Models.Identity] + xproperties: [1×1 adx.Models.ClusterProperties_1] + etag: ""2023-01-04T12:40:35.3452388Z"" + id: "/subscriptions/0674/resourceGroups/mbadx/providers/Microsoft.Kusto/Clusters/myclustername" + name: "myclustername" + type: "Microsoft.Kusto/Clusters" + +>> result.value.sku +ans = + AzureSku with properties: + + name: Dev_No_SLA_Standard_E2a_v4 + capacity: 1 + tier: Basic +``` + +> The `[tf, cluster] = mathworks.adx.isClusterRunning(...)` command is a convenient function to +> easily determine if a default or given cluster is running or not. + +### Management + +```matlab +% Get Identity token +m = adx.data.api.Management('scopes', dataPlaneScopes) +req = adx.data.models.ManagementRequest +req.csl = '.get kusto identity token' +ingestCluster = "https://ingest-myadxcluster.westeurope.kusto.windows.net" +[code, result, response] = m.managementRun(req, ingestCluster) + +q = adx.data.api.Ingest() +``` + +More concisely using configured defaults: + +```matlab +m = adx.data.api.Management() +req = adx.data.models.ManagementRequest +req.csl = '.get kusto identity token' +[code, result, response] = m.managementRun(req) +``` + +## References + +For more sample commands see: + +* Example code: `Software/MATLAB/adxDemo.m` +* Basic test code: `Software/MATLAB/test/unit/*.m` + +For further API reference information see: + +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/access-control/how-to-authenticate-with-aad](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/access-control/how-to-authenticate-with-aad) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/) +* [https://learn.microsoft.com/en-us/rest/api/azurerekusto/](https://learn.microsoft.com/en-us/rest/api/azurerekusto/) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/connection-strings/kusto](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/connection-strings/kusto) +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/sql-cheat-sheet](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/sql-cheat-sheet) + +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/APIReference.md.txt b/Documentation/html/_sources/APIReference.md.txt new file mode 100644 index 0000000..dabf78a --- /dev/null +++ b/Documentation/html/_sources/APIReference.md.txt @@ -0,0 +1,17841 @@ +# MATLAB Interface *for Azure Services* - API Reference + +Classes, methods and functions that include the terms `private` or `internal` in their namespace should not be used directly. +They are subject to change or removal without notice. +The majority of `adx.control` APIs are generated using OpenAPI. see: [OpenAPI.md](OpenAPI.md) + +## Index + +* MATLAB Interface *for Azure Services* + * [adx](#adx) + * [adx.control](#adxcontrol) + * [adx.control.api](#adxcontrolapi) + * [adx.control.api.AttachedDatabaseConfigurations](#adxcontrolapiattacheddatabaseconfigurations) + * [adx.control.api.AttachedDatabaseConfigurations.AttachedDatabaseConfigurations](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurations) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCheckNameAvailability](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationschecknameavailability) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCreateOrUpdate](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationscreateorupdate) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsDelete](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationsdelete) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsGet](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationsget) + * [adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsListByCluster](#adxcontrolapiattacheddatabaseconfigurationsattacheddatabaseconfigurationslistbycluster) + * [adx.control.api.ClusterPrincipalAssignments](#adxcontrolapiclusterprincipalassignments) + * [adx.control.api.ClusterPrincipalAssignments.ClusterPrincipalAssignments](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignments) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCheckNameAvailability](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentschecknameavailability) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCreateOrUpdate](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentscreateorupdate) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsDelete](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentsdelete) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsGet](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentsget) + * [adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsList](#adxcontrolapiclusterprincipalassignmentsclusterprincipalassignmentslist) + * [adx.control.api.Clusters](#adxcontrolapiclusters) + * [adx.control.api.Clusters.Clusters](#adxcontrolapiclustersclusters) + * [adx.control.api.Clusters.clustersAddLanguageExtensions](#adxcontrolapiclustersclustersaddlanguageextensions) + * [adx.control.api.Clusters.clustersCheckNameAvailability](#adxcontrolapiclustersclusterschecknameavailability) + * [adx.control.api.Clusters.clustersCreateOrUpdate](#adxcontrolapiclustersclusterscreateorupdate) + * [adx.control.api.Clusters.clustersDelete](#adxcontrolapiclustersclustersdelete) + * [adx.control.api.Clusters.clustersDetachFollowerDatabases](#adxcontrolapiclustersclustersdetachfollowerdatabases) + * [adx.control.api.Clusters.clustersDiagnoseVirtualNetwork](#adxcontrolapiclustersclustersdiagnosevirtualnetwork) + * [adx.control.api.Clusters.clustersGet](#adxcontrolapiclustersclustersget) + * [adx.control.api.Clusters.clustersList](#adxcontrolapiclustersclusterslist) + * [adx.control.api.Clusters.clustersListByResourceGroup](#adxcontrolapiclustersclusterslistbyresourcegroup) + * [adx.control.api.Clusters.clustersListFollowerDatabases](#adxcontrolapiclustersclusterslistfollowerdatabases) + * [adx.control.api.Clusters.clustersListLanguageExtensions](#adxcontrolapiclustersclusterslistlanguageextensions) + * [adx.control.api.Clusters.clustersListSkusByResource](#adxcontrolapiclustersclusterslistskusbyresource) + * [adx.control.api.Clusters.clustersMigrate](#adxcontrolapiclustersclustersmigrate) + * [adx.control.api.Clusters.clustersRemoveLanguageExtensions](#adxcontrolapiclustersclustersremovelanguageextensions) + * [adx.control.api.Clusters.clustersStart](#adxcontrolapiclustersclustersstart) + * [adx.control.api.Clusters.clustersStop](#adxcontrolapiclustersclustersstop) + * [adx.control.api.Clusters.clustersUpdate](#adxcontrolapiclustersclustersupdate) + * [adx.control.api.DataConnections](#adxcontrolapidataconnections) + * [adx.control.api.DataConnections.DataConnections](#adxcontrolapidataconnectionsdataconnections) + * [adx.control.api.DataConnections.dataConnectionsCheckNameAvailability](#adxcontrolapidataconnectionsdataconnectionschecknameavailability) + * [adx.control.api.DataConnections.dataConnectionsCreateOrUpdate](#adxcontrolapidataconnectionsdataconnectionscreateorupdate) + * [adx.control.api.DataConnections.dataConnectionsDataConnectionValidation](#adxcontrolapidataconnectionsdataconnectionsdataconnectionvalidation) + * [adx.control.api.DataConnections.dataConnectionsDelete](#adxcontrolapidataconnectionsdataconnectionsdelete) + * [adx.control.api.DataConnections.dataConnectionsGet](#adxcontrolapidataconnectionsdataconnectionsget) + * [adx.control.api.DataConnections.dataConnectionsListByDatabase](#adxcontrolapidataconnectionsdataconnectionslistbydatabase) + * [adx.control.api.DataConnections.dataConnectionsUpdate](#adxcontrolapidataconnectionsdataconnectionsupdate) + * [adx.control.api.DatabasePrincipalAssignments](#adxcontrolapidatabaseprincipalassignments) + * [adx.control.api.DatabasePrincipalAssignments.DatabasePrincipalAssignments](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignments) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCheckNameAvailability](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentschecknameavailability) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCreateOrUpdate](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentscreateorupdate) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsDelete](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentsdelete) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsGet](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentsget) + * [adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsList](#adxcontrolapidatabaseprincipalassignmentsdatabaseprincipalassignmentslist) + * [adx.control.api.Databases](#adxcontrolapidatabases) + * [adx.control.api.Databases.Databases](#adxcontrolapidatabasesdatabases) + * [adx.control.api.Databases.databaseInviteFollower](#adxcontrolapidatabasesdatabaseinvitefollower) + * [adx.control.api.Databases.databasesAddPrincipals](#adxcontrolapidatabasesdatabasesaddprincipals) + * [adx.control.api.Databases.databasesCheckNameAvailability](#adxcontrolapidatabasesdatabaseschecknameavailability) + * [adx.control.api.Databases.databasesCreateOrUpdate](#adxcontrolapidatabasesdatabasescreateorupdate) + * [adx.control.api.Databases.databasesDelete](#adxcontrolapidatabasesdatabasesdelete) + * [adx.control.api.Databases.databasesGet](#adxcontrolapidatabasesdatabasesget) + * [adx.control.api.Databases.databasesListByCluster](#adxcontrolapidatabasesdatabaseslistbycluster) + * [adx.control.api.Databases.databasesListPrincipals](#adxcontrolapidatabasesdatabaseslistprincipals) + * [adx.control.api.Databases.databasesRemovePrincipals](#adxcontrolapidatabasesdatabasesremoveprincipals) + * [adx.control.api.Databases.databasesUpdate](#adxcontrolapidatabasesdatabasesupdate) + * [adx.control.api.Default](#adxcontrolapidefault) + * [adx.control.api.Default.Default](#adxcontrolapidefaultdefault) + * [adx.control.api.Default.clustersListSkus](#adxcontrolapidefaultclusterslistskus) + * [adx.control.api.Default.skusList](#adxcontrolapidefaultskuslist) + * [adx.control.api.ManagedPrivateEndpoints](#adxcontrolapimanagedprivateendpoints) + * [adx.control.api.ManagedPrivateEndpoints.ManagedPrivateEndpoints](#adxcontrolapimanagedprivateendpointsmanagedprivateendpoints) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCheckNameAvailability](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointschecknameavailability) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCreateOrUpdate](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointscreateorupdate) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsDelete](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsdelete) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsGet](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsget) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsList](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointslist) + * [adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsUpdate](#adxcontrolapimanagedprivateendpointsmanagedprivateendpointsupdate) + * [adx.control.api.OperationResults](#adxcontrolapioperationresults) + * [adx.control.api.OperationResults.OperationResults](#adxcontrolapioperationresultsoperationresults) + * [adx.control.api.OperationResults.operationsResultsGet](#adxcontrolapioperationresultsoperationsresultsget) + * [adx.control.api.Operations](#adxcontrolapioperations) + * [adx.control.api.Operations.Operations](#adxcontrolapioperationsoperations) + * [adx.control.api.Operations.operationsList](#adxcontrolapioperationsoperationslist) + * [adx.control.api.OutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpoints) + * [adx.control.api.OutboundNetworkDependenciesEndpoints.OutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpointsoutboundnetworkdependenciesendpoints) + * [adx.control.api.OutboundNetworkDependenciesEndpoints.clustersListOutboundNetworkDependenciesEndpoints](#adxcontrolapioutboundnetworkdependenciesendpointsclusterslistoutboundnetworkdependenciesendpoints) + * [adx.control.api.PrivateEndpointConnections](#adxcontrolapiprivateendpointconnections) + * [adx.control.api.PrivateEndpointConnections.PrivateEndpointConnections](#adxcontrolapiprivateendpointconnectionsprivateendpointconnections) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsCreateOrUpdate](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionscreateorupdate) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsDelete](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionsdelete) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsGet](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionsget) + * [adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsList](#adxcontrolapiprivateendpointconnectionsprivateendpointconnectionslist) + * [adx.control.api.PrivateLinkResources](#adxcontrolapiprivatelinkresources) + * [adx.control.api.PrivateLinkResources.PrivateLinkResources](#adxcontrolapiprivatelinkresourcesprivatelinkresources) + * [adx.control.api.PrivateLinkResources.privateLinkResourcesGet](#adxcontrolapiprivatelinkresourcesprivatelinkresourcesget) + * [adx.control.api.PrivateLinkResources.privateLinkResourcesList](#adxcontrolapiprivatelinkresourcesprivatelinkresourceslist) + * [adx.control.api.Scripts](#adxcontrolapiscripts) + * [adx.control.api.Scripts.Scripts](#adxcontrolapiscriptsscripts) + * [adx.control.api.Scripts.scriptsListByDatabase](#adxcontrolapiscriptsscriptslistbydatabase) + * [adx.control.models](#adxcontrolmodels) + * [adx.control.models.AcceptedAudiences](#adxcontrolmodelsacceptedaudiences) + * [adx.control.models.AcceptedAudiences.AcceptedAudiences](#adxcontrolmodelsacceptedaudiencesacceptedaudiences) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0000) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0000attacheddatabaseconfidefaultprincipalsmodificationkindenum_0000) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0001) + * [adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001](#adxcontrolmodelsattacheddatabaseconfidefaultprincipalsmodificationkindenum_0001attacheddatabaseconfidefaultprincipalsmodificationkindenum_0001) + * [adx.control.models.AttachedDatabaseConfiguration](#adxcontrolmodelsattacheddatabaseconfiguration) + * [adx.control.models.AttachedDatabaseConfiguration.AttachedDatabaseConfiguration](#adxcontrolmodelsattacheddatabaseconfigurationattacheddatabaseconfiguration) + * [adx.control.models.AttachedDatabaseConfigurationListResult](#adxcontrolmodelsattacheddatabaseconfigurationlistresult) + * [adx.control.models.AttachedDatabaseConfigurationListResult.AttachedDatabaseConfigurationListResult](#adxcontrolmodelsattacheddatabaseconfigurationlistresultattacheddatabaseconfigurationlistresult) + * [adx.control.models.AttachedDatabaseConfigurationProperties](#adxcontrolmodelsattacheddatabaseconfigurationproperties) + * [adx.control.models.AttachedDatabaseConfigurationProperties.AttachedDatabaseConfigurationProperties](#adxcontrolmodelsattacheddatabaseconfigurationpropertiesattacheddatabaseconfigurationproperties) + * [adx.control.models.AttachedDatabaseConfigurationProperties_1](#adxcontrolmodelsattacheddatabaseconfigurationproperties_1) + * [adx.control.models.AttachedDatabaseConfigurationProperties_1.AttachedDatabaseConfigurationProperties_1](#adxcontrolmodelsattacheddatabaseconfigurationproperties_1attacheddatabaseconfigurationproperties_1) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequest) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest.AttachedDatabaseConfigurationsCheckNameRequest](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequestattacheddatabaseconfigurationschecknamerequest) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequesttypeenum) + * [adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum](#adxcontrolmodelsattacheddatabaseconfigurationschecknamerequesttypeenumattacheddatabaseconfigurationschecknamerequesttypeenum) + * [adx.control.models.AzureCapacity](#adxcontrolmodelsazurecapacity) + * [adx.control.models.AzureCapacity.AzureCapacity](#adxcontrolmodelsazurecapacityazurecapacity) + * [adx.control.models.AzureCapacityScaleTypeEnum](#adxcontrolmodelsazurecapacityscaletypeenum) + * [adx.control.models.AzureCapacityScaleTypeEnum.AzureCapacityScaleTypeEnum](#adxcontrolmodelsazurecapacityscaletypeenumazurecapacityscaletypeenum) + * [adx.control.models.AzureResourceSku](#adxcontrolmodelsazureresourcesku) + * [adx.control.models.AzureResourceSku.AzureResourceSku](#adxcontrolmodelsazureresourceskuazureresourcesku) + * [adx.control.models.AzureResourceSku_1](#adxcontrolmodelsazureresourcesku_1) + * [adx.control.models.AzureResourceSku_1.AzureResourceSku_1](#adxcontrolmodelsazureresourcesku_1azureresourcesku_1) + * [adx.control.models.AzureSku](#adxcontrolmodelsazuresku) + * [adx.control.models.AzureSku.AzureSku](#adxcontrolmodelsazureskuazuresku) + * [adx.control.models.AzureSkuNameEnum](#adxcontrolmodelsazureskunameenum) + * [adx.control.models.AzureSkuNameEnum.AzureSkuNameEnum](#adxcontrolmodelsazureskunameenumazureskunameenum) + * [adx.control.models.AzureSkuTierEnum](#adxcontrolmodelsazureskutierenum) + * [adx.control.models.AzureSkuTierEnum.AzureSkuTierEnum](#adxcontrolmodelsazureskutierenumazureskutierenum) + * [adx.control.models.BlobStorageEventType](#adxcontrolmodelsblobstorageeventtype) + * [adx.control.models.BlobStorageEventType.BlobStorageEventType](#adxcontrolmodelsblobstorageeventtypeblobstorageeventtype) + * [adx.control.models.CheckNameRequest](#adxcontrolmodelschecknamerequest) + * [adx.control.models.CheckNameRequest.CheckNameRequest](#adxcontrolmodelschecknamerequestchecknamerequest) + * [adx.control.models.CheckNameRequestTypeEnum](#adxcontrolmodelschecknamerequesttypeenum) + * [adx.control.models.CheckNameRequestTypeEnum.CheckNameRequestTypeEnum](#adxcontrolmodelschecknamerequesttypeenumchecknamerequesttypeenum) + * [adx.control.models.CheckNameResult](#adxcontrolmodelschecknameresult) + * [adx.control.models.CheckNameResult.CheckNameResult](#adxcontrolmodelschecknameresultchecknameresult) + * [adx.control.models.CheckNameResultReasonEnum](#adxcontrolmodelschecknameresultreasonenum) + * [adx.control.models.CheckNameResultReasonEnum.CheckNameResultReasonEnum](#adxcontrolmodelschecknameresultreasonenumchecknameresultreasonenum) + * [adx.control.models.Cluster](#adxcontrolmodelscluster) + * [adx.control.models.Cluster.Cluster](#adxcontrolmodelsclustercluster) + * [adx.control.models.ClusterCheckNameRequest](#adxcontrolmodelsclusterchecknamerequest) + * [adx.control.models.ClusterCheckNameRequest.ClusterCheckNameRequest](#adxcontrolmodelsclusterchecknamerequestclusterchecknamerequest) + * [adx.control.models.ClusterCheckNameRequestTypeEnum](#adxcontrolmodelsclusterchecknamerequesttypeenum) + * [adx.control.models.ClusterCheckNameRequestTypeEnum.ClusterCheckNameRequestTypeEnum](#adxcontrolmodelsclusterchecknamerequesttypeenumclusterchecknamerequesttypeenum) + * [adx.control.models.ClusterListResult](#adxcontrolmodelsclusterlistresult) + * [adx.control.models.ClusterListResult.ClusterListResult](#adxcontrolmodelsclusterlistresultclusterlistresult) + * [adx.control.models.ClusterMigrateRequest](#adxcontrolmodelsclustermigraterequest) + * [adx.control.models.ClusterMigrateRequest.ClusterMigrateRequest](#adxcontrolmodelsclustermigraterequestclustermigraterequest) + * [adx.control.models.ClusterPrincipalAssignment](#adxcontrolmodelsclusterprincipalassignment) + * [adx.control.models.ClusterPrincipalAssignment.ClusterPrincipalAssignment](#adxcontrolmodelsclusterprincipalassignmentclusterprincipalassignment) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequest](#adxcontrolmodelsclusterprincipalassignmentchecknamerequest) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequest.ClusterPrincipalAssignmentCheckNameRequest](#adxcontrolmodelsclusterprincipalassignmentchecknamerequestclusterprincipalassignmentchecknamerequest) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsclusterprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum.ClusterPrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsclusterprincipalassignmentchecknamerequesttypeenumclusterprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.ClusterPrincipalAssignmentListResult](#adxcontrolmodelsclusterprincipalassignmentlistresult) + * [adx.control.models.ClusterPrincipalAssignmentListResult.ClusterPrincipalAssignmentListResult](#adxcontrolmodelsclusterprincipalassignmentlistresultclusterprincipalassignmentlistresult) + * [adx.control.models.ClusterPrincipalProperties](#adxcontrolmodelsclusterprincipalproperties) + * [adx.control.models.ClusterPrincipalProperties.ClusterPrincipalProperties](#adxcontrolmodelsclusterprincipalpropertiesclusterprincipalproperties) + * [adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsclusterprincipalpropertiesprincipaltypeenum) + * [adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum.ClusterPrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsclusterprincipalpropertiesprincipaltypeenumclusterprincipalpropertiesprincipaltypeenum) + * [adx.control.models.ClusterPrincipalPropertiesRoleEnum](#adxcontrolmodelsclusterprincipalpropertiesroleenum) + * [adx.control.models.ClusterPrincipalPropertiesRoleEnum.ClusterPrincipalPropertiesRoleEnum](#adxcontrolmodelsclusterprincipalpropertiesroleenumclusterprincipalpropertiesroleenum) + * [adx.control.models.ClusterPrincipalProperties_1](#adxcontrolmodelsclusterprincipalproperties_1) + * [adx.control.models.ClusterPrincipalProperties_1.ClusterPrincipalProperties_1](#adxcontrolmodelsclusterprincipalproperties_1clusterprincipalproperties_1) + * [adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsclusterprincipalproperties_1principaltypeenum) + * [adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum.ClusterPrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsclusterprincipalproperties_1principaltypeenumclusterprincipalproperties_1principaltypeenum) + * [adx.control.models.ClusterPrincipalProperties_1RoleEnum](#adxcontrolmodelsclusterprincipalproperties_1roleenum) + * [adx.control.models.ClusterPrincipalProperties_1RoleEnum.ClusterPrincipalProperties_1RoleEnum](#adxcontrolmodelsclusterprincipalproperties_1roleenumclusterprincipalproperties_1roleenum) + * [adx.control.models.ClusterProperties](#adxcontrolmodelsclusterproperties) + * [adx.control.models.ClusterProperties.ClusterProperties](#adxcontrolmodelsclusterpropertiesclusterproperties) + * [adx.control.models.ClusterPropertiesEngineTypeEnum](#adxcontrolmodelsclusterpropertiesenginetypeenum) + * [adx.control.models.ClusterPropertiesEngineTypeEnum.ClusterPropertiesEngineTypeEnum](#adxcontrolmodelsclusterpropertiesenginetypeenumclusterpropertiesenginetypeenum) + * [adx.control.models.ClusterPropertiesPublicIPTypeEnum](#adxcontrolmodelsclusterpropertiespubliciptypeenum) + * [adx.control.models.ClusterPropertiesPublicIPTypeEnum.ClusterPropertiesPublicIPTypeEnum](#adxcontrolmodelsclusterpropertiespubliciptypeenumclusterpropertiespubliciptypeenum) + * [adx.control.models.ClusterPropertiesPublicNetworkAccessEnum](#adxcontrolmodelsclusterpropertiespublicnetworkaccessenum) + * [adx.control.models.ClusterPropertiesPublicNetworkAccessEnum.ClusterPropertiesPublicNetworkAccessEnum](#adxcontrolmodelsclusterpropertiespublicnetworkaccessenumclusterpropertiespublicnetworkaccessenum) + * [adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterpropertiesrestrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum.ClusterPropertiesRestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterpropertiesrestrictoutboundnetworkaccessenumclusterpropertiesrestrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterPropertiesStateEnum](#adxcontrolmodelsclusterpropertiesstateenum) + * [adx.control.models.ClusterPropertiesStateEnum.ClusterPropertiesStateEnum](#adxcontrolmodelsclusterpropertiesstateenumclusterpropertiesstateenum) + * [adx.control.models.ClusterProperties_1](#adxcontrolmodelsclusterproperties_1) + * [adx.control.models.ClusterProperties_1.ClusterProperties_1](#adxcontrolmodelsclusterproperties_1clusterproperties_1) + * [adx.control.models.ClusterProperties_1EngineTypeEnum](#adxcontrolmodelsclusterproperties_1enginetypeenum) + * [adx.control.models.ClusterProperties_1EngineTypeEnum.ClusterProperties_1EngineTypeEnum](#adxcontrolmodelsclusterproperties_1enginetypeenumclusterproperties_1enginetypeenum) + * [adx.control.models.ClusterProperties_1PublicIPTypeEnum](#adxcontrolmodelsclusterproperties_1publiciptypeenum) + * [adx.control.models.ClusterProperties_1PublicIPTypeEnum.ClusterProperties_1PublicIPTypeEnum](#adxcontrolmodelsclusterproperties_1publiciptypeenumclusterproperties_1publiciptypeenum) + * [adx.control.models.ClusterProperties_1PublicNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1publicnetworkaccessenum) + * [adx.control.models.ClusterProperties_1PublicNetworkAccessEnum.ClusterProperties_1PublicNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1publicnetworkaccessenumclusterproperties_1publicnetworkaccessenum) + * [adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1restrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum.ClusterProperties_1RestrictOutboundNetworkAccessEnum](#adxcontrolmodelsclusterproperties_1restrictoutboundnetworkaccessenumclusterproperties_1restrictoutboundnetworkaccessenum) + * [adx.control.models.ClusterProperties_1StateEnum](#adxcontrolmodelsclusterproperties_1stateenum) + * [adx.control.models.ClusterProperties_1StateEnum.ClusterProperties_1StateEnum](#adxcontrolmodelsclusterproperties_1stateenumclusterproperties_1stateenum) + * [adx.control.models.ClusterUpdate](#adxcontrolmodelsclusterupdate) + * [adx.control.models.ClusterUpdate.ClusterUpdate](#adxcontrolmodelsclusterupdateclusterupdate) + * [adx.control.models.Compression](#adxcontrolmodelscompression) + * [adx.control.models.Compression.Compression](#adxcontrolmodelscompressioncompression) + * [adx.control.models.CosmosDbDataConnection](#adxcontrolmodelscosmosdbdataconnection) + * [adx.control.models.CosmosDbDataConnection.CosmosDbDataConnection](#adxcontrolmodelscosmosdbdataconnectioncosmosdbdataconnection) + * [adx.control.models.CosmosDbDataConnectionProperties](#adxcontrolmodelscosmosdbdataconnectionproperties) + * [adx.control.models.CosmosDbDataConnectionProperties.CosmosDbDataConnectionProperties](#adxcontrolmodelscosmosdbdataconnectionpropertiescosmosdbdataconnectionproperties) + * [adx.control.models.CosmosDbDataConnectionProperties_1](#adxcontrolmodelscosmosdbdataconnectionproperties_1) + * [adx.control.models.CosmosDbDataConnectionProperties_1.CosmosDbDataConnectionProperties_1](#adxcontrolmodelscosmosdbdataconnectionproperties_1cosmosdbdataconnectionproperties_1) + * [adx.control.models.DataConnection](#adxcontrolmodelsdataconnection) + * [adx.control.models.DataConnection.DataConnection](#adxcontrolmodelsdataconnectiondataconnection) + * [adx.control.models.DataConnectionCheckNameRequest](#adxcontrolmodelsdataconnectionchecknamerequest) + * [adx.control.models.DataConnectionCheckNameRequest.DataConnectionCheckNameRequest](#adxcontrolmodelsdataconnectionchecknamerequestdataconnectionchecknamerequest) + * [adx.control.models.DataConnectionCheckNameRequestTypeEnum](#adxcontrolmodelsdataconnectionchecknamerequesttypeenum) + * [adx.control.models.DataConnectionCheckNameRequestTypeEnum.DataConnectionCheckNameRequestTypeEnum](#adxcontrolmodelsdataconnectionchecknamerequesttypeenumdataconnectionchecknamerequesttypeenum) + * [adx.control.models.DataConnectionKindEnum](#adxcontrolmodelsdataconnectionkindenum) + * [adx.control.models.DataConnectionKindEnum.DataConnectionKindEnum](#adxcontrolmodelsdataconnectionkindenumdataconnectionkindenum) + * [adx.control.models.DataConnectionListResult](#adxcontrolmodelsdataconnectionlistresult) + * [adx.control.models.DataConnectionListResult.DataConnectionListResult](#adxcontrolmodelsdataconnectionlistresultdataconnectionlistresult) + * [adx.control.models.DataConnectionValidation](#adxcontrolmodelsdataconnectionvalidation) + * [adx.control.models.DataConnectionValidation.DataConnectionValidation](#adxcontrolmodelsdataconnectionvalidationdataconnectionvalidation) + * [adx.control.models.DataConnectionValidationListResult](#adxcontrolmodelsdataconnectionvalidationlistresult) + * [adx.control.models.DataConnectionValidationListResult.DataConnectionValidationListResult](#adxcontrolmodelsdataconnectionvalidationlistresultdataconnectionvalidationlistresult) + * [adx.control.models.DataConnectionValidationResult](#adxcontrolmodelsdataconnectionvalidationresult) + * [adx.control.models.DataConnectionValidationResult.DataConnectionValidationResult](#adxcontrolmodelsdataconnectionvalidationresultdataconnectionvalidationresult) + * [adx.control.models.Database](#adxcontrolmodelsdatabase) + * [adx.control.models.Database.Database](#adxcontrolmodelsdatabasedatabase) + * [adx.control.models.DatabaseInviteFollowerRequest](#adxcontrolmodelsdatabaseinvitefollowerrequest) + * [adx.control.models.DatabaseInviteFollowerRequest.DatabaseInviteFollowerRequest](#adxcontrolmodelsdatabaseinvitefollowerrequestdatabaseinvitefollowerrequest) + * [adx.control.models.DatabaseInviteFollowerResult](#adxcontrolmodelsdatabaseinvitefollowerresult) + * [adx.control.models.DatabaseInviteFollowerResult.DatabaseInviteFollowerResult](#adxcontrolmodelsdatabaseinvitefollowerresultdatabaseinvitefollowerresult) + * [adx.control.models.DatabaseKindEnum](#adxcontrolmodelsdatabasekindenum) + * [adx.control.models.DatabaseKindEnum.DatabaseKindEnum](#adxcontrolmodelsdatabasekindenumdatabasekindenum) + * [adx.control.models.DatabaseListResult](#adxcontrolmodelsdatabaselistresult) + * [adx.control.models.DatabaseListResult.DatabaseListResult](#adxcontrolmodelsdatabaselistresultdatabaselistresult) + * [adx.control.models.DatabasePrincipal](#adxcontrolmodelsdatabaseprincipal) + * [adx.control.models.DatabasePrincipal.DatabasePrincipal](#adxcontrolmodelsdatabaseprincipaldatabaseprincipal) + * [adx.control.models.DatabasePrincipalAssignment](#adxcontrolmodelsdatabaseprincipalassignment) + * [adx.control.models.DatabasePrincipalAssignment.DatabasePrincipalAssignment](#adxcontrolmodelsdatabaseprincipalassignmentdatabaseprincipalassignment) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequest](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequest) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequest.DatabasePrincipalAssignmentCheckNameRequest](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequestdatabaseprincipalassignmentchecknamerequest) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum.DatabasePrincipalAssignmentCheckNameRequestTypeEnum](#adxcontrolmodelsdatabaseprincipalassignmentchecknamerequesttypeenumdatabaseprincipalassignmentchecknamerequesttypeenum) + * [adx.control.models.DatabasePrincipalAssignmentListResult](#adxcontrolmodelsdatabaseprincipalassignmentlistresult) + * [adx.control.models.DatabasePrincipalAssignmentListResult.DatabasePrincipalAssignmentListResult](#adxcontrolmodelsdatabaseprincipalassignmentlistresultdatabaseprincipalassignmentlistresult) + * [adx.control.models.DatabasePrincipalListRequest](#adxcontrolmodelsdatabaseprincipallistrequest) + * [adx.control.models.DatabasePrincipalListRequest.DatabasePrincipalListRequest](#adxcontrolmodelsdatabaseprincipallistrequestdatabaseprincipallistrequest) + * [adx.control.models.DatabasePrincipalListResult](#adxcontrolmodelsdatabaseprincipallistresult) + * [adx.control.models.DatabasePrincipalListResult.DatabasePrincipalListResult](#adxcontrolmodelsdatabaseprincipallistresultdatabaseprincipallistresult) + * [adx.control.models.DatabasePrincipalProperties](#adxcontrolmodelsdatabaseprincipalproperties) + * [adx.control.models.DatabasePrincipalProperties.DatabasePrincipalProperties](#adxcontrolmodelsdatabaseprincipalpropertiesdatabaseprincipalproperties) + * [adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalpropertiesprincipaltypeenum) + * [adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum.DatabasePrincipalPropertiesPrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalpropertiesprincipaltypeenumdatabaseprincipalpropertiesprincipaltypeenum) + * [adx.control.models.DatabasePrincipalPropertiesRoleEnum](#adxcontrolmodelsdatabaseprincipalpropertiesroleenum) + * [adx.control.models.DatabasePrincipalPropertiesRoleEnum.DatabasePrincipalPropertiesRoleEnum](#adxcontrolmodelsdatabaseprincipalpropertiesroleenumdatabaseprincipalpropertiesroleenum) + * [adx.control.models.DatabasePrincipalProperties_1](#adxcontrolmodelsdatabaseprincipalproperties_1) + * [adx.control.models.DatabasePrincipalProperties_1.DatabasePrincipalProperties_1](#adxcontrolmodelsdatabaseprincipalproperties_1databaseprincipalproperties_1) + * [adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalproperties_1principaltypeenum) + * [adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum.DatabasePrincipalProperties_1PrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipalproperties_1principaltypeenumdatabaseprincipalproperties_1principaltypeenum) + * [adx.control.models.DatabasePrincipalProperties_1RoleEnum](#adxcontrolmodelsdatabaseprincipalproperties_1roleenum) + * [adx.control.models.DatabasePrincipalProperties_1RoleEnum.DatabasePrincipalProperties_1RoleEnum](#adxcontrolmodelsdatabaseprincipalproperties_1roleenumdatabaseprincipalproperties_1roleenum) + * [adx.control.models.DatabasePrincipalRoleEnum](#adxcontrolmodelsdatabaseprincipalroleenum) + * [adx.control.models.DatabasePrincipalRoleEnum.DatabasePrincipalRoleEnum](#adxcontrolmodelsdatabaseprincipalroleenumdatabaseprincipalroleenum) + * [adx.control.models.DatabasePrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipaltypeenum) + * [adx.control.models.DatabasePrincipalTypeEnum.DatabasePrincipalTypeEnum](#adxcontrolmodelsdatabaseprincipaltypeenumdatabaseprincipaltypeenum) + * [adx.control.models.DatabaseShareOrigin](#adxcontrolmodelsdatabaseshareorigin) + * [adx.control.models.DatabaseShareOrigin.DatabaseShareOrigin](#adxcontrolmodelsdatabaseshareorigindatabaseshareorigin) + * [adx.control.models.DatabaseStatistics](#adxcontrolmodelsdatabasestatistics) + * [adx.control.models.DatabaseStatistics.DatabaseStatistics](#adxcontrolmodelsdatabasestatisticsdatabasestatistics) + * [adx.control.models.DiagnoseVirtualNetworkResult](#adxcontrolmodelsdiagnosevirtualnetworkresult) + * [adx.control.models.DiagnoseVirtualNetworkResult.DiagnoseVirtualNetworkResult](#adxcontrolmodelsdiagnosevirtualnetworkresultdiagnosevirtualnetworkresult) + * [adx.control.models.EndpointDependency](#adxcontrolmodelsendpointdependency) + * [adx.control.models.EndpointDependency.EndpointDependency](#adxcontrolmodelsendpointdependencyendpointdependency) + * [adx.control.models.EndpointDetail](#adxcontrolmodelsendpointdetail) + * [adx.control.models.EndpointDetail.EndpointDetail](#adxcontrolmodelsendpointdetailendpointdetail) + * [adx.control.models.ErrorAdditionalInfo](#adxcontrolmodelserroradditionalinfo) + * [adx.control.models.ErrorAdditionalInfo.ErrorAdditionalInfo](#adxcontrolmodelserroradditionalinfoerroradditionalinfo) + * [adx.control.models.ErrorAdditionalInfo.disp](#adxcontrolmodelserroradditionalinfodisp) + * [adx.control.models.ErrorDetail](#adxcontrolmodelserrordetail) + * [adx.control.models.ErrorDetail.ErrorDetail](#adxcontrolmodelserrordetailerrordetail) + * [adx.control.models.ErrorDetail.disp](#adxcontrolmodelserrordetaildisp) + * [adx.control.models.ErrorResponse](#adxcontrolmodelserrorresponse) + * [adx.control.models.ErrorResponse.ErrorResponse](#adxcontrolmodelserrorresponseerrorresponse) + * [adx.control.models.ErrorResponse.disp](#adxcontrolmodelserrorresponsedisp) + * [adx.control.models.EventGridConnectionProperties](#adxcontrolmodelseventgridconnectionproperties) + * [adx.control.models.EventGridConnectionProperties.EventGridConnectionProperties](#adxcontrolmodelseventgridconnectionpropertieseventgridconnectionproperties) + * [adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum.EventGridConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionpropertiesdatabaseroutingenumeventgridconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventGridConnectionProperties_1](#adxcontrolmodelseventgridconnectionproperties_1) + * [adx.control.models.EventGridConnectionProperties_1.EventGridConnectionProperties_1](#adxcontrolmodelseventgridconnectionproperties_1eventgridconnectionproperties_1) + * [adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum.EventGridConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventgridconnectionproperties_1databaseroutingenumeventgridconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventGridDataConnection](#adxcontrolmodelseventgriddataconnection) + * [adx.control.models.EventGridDataConnection.EventGridDataConnection](#adxcontrolmodelseventgriddataconnectioneventgriddataconnection) + * [adx.control.models.EventGridDataFormat](#adxcontrolmodelseventgriddataformat) + * [adx.control.models.EventGridDataFormat.EventGridDataFormat](#adxcontrolmodelseventgriddataformateventgriddataformat) + * [adx.control.models.EventHubConnectionProperties](#adxcontrolmodelseventhubconnectionproperties) + * [adx.control.models.EventHubConnectionProperties.EventHubConnectionProperties](#adxcontrolmodelseventhubconnectionpropertieseventhubconnectionproperties) + * [adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum.EventHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionpropertiesdatabaseroutingenumeventhubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.EventHubConnectionProperties_1](#adxcontrolmodelseventhubconnectionproperties_1) + * [adx.control.models.EventHubConnectionProperties_1.EventHubConnectionProperties_1](#adxcontrolmodelseventhubconnectionproperties_1eventhubconnectionproperties_1) + * [adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum.EventHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelseventhubconnectionproperties_1databaseroutingenumeventhubconnectionproperties_1databaseroutingenum) + * [adx.control.models.EventHubDataConnection](#adxcontrolmodelseventhubdataconnection) + * [adx.control.models.EventHubDataConnection.EventHubDataConnection](#adxcontrolmodelseventhubdataconnectioneventhubdataconnection) + * [adx.control.models.EventHubDataFormat](#adxcontrolmodelseventhubdataformat) + * [adx.control.models.EventHubDataFormat.EventHubDataFormat](#adxcontrolmodelseventhubdataformateventhubdataformat) + * [adx.control.models.FollowerDatabaseDefinition](#adxcontrolmodelsfollowerdatabasedefinition) + * [adx.control.models.FollowerDatabaseDefinition.FollowerDatabaseDefinition](#adxcontrolmodelsfollowerdatabasedefinitionfollowerdatabasedefinition) + * [adx.control.models.FollowerDatabaseListResult](#adxcontrolmodelsfollowerdatabaselistresult) + * [adx.control.models.FollowerDatabaseListResult.FollowerDatabaseListResult](#adxcontrolmodelsfollowerdatabaselistresultfollowerdatabaselistresult) + * [adx.control.models.FreeFormObject](#adxcontrolmodelsfreeformobject) + * [adx.control.models.FreeFormObject.FreeFormObject](#adxcontrolmodelsfreeformobjectfreeformobject) + * [adx.control.models.Identity](#adxcontrolmodelsidentity) + * [adx.control.models.Identity.Identity](#adxcontrolmodelsidentityidentity) + * [adx.control.models.IdentityTypeEnum](#adxcontrolmodelsidentitytypeenum) + * [adx.control.models.IdentityTypeEnum.IdentityTypeEnum](#adxcontrolmodelsidentitytypeenumidentitytypeenum) + * [adx.control.models.Identity_userAssignedIdentities_value](#adxcontrolmodelsidentity_userassignedidentities_value) + * [adx.control.models.Identity_userAssignedIdentities_value.Identity_userAssignedIdentities_value](#adxcontrolmodelsidentity_userassignedidentities_valueidentity_userassignedidentities_value) + * [adx.control.models.IotHubConnectionProperties](#adxcontrolmodelsiothubconnectionproperties) + * [adx.control.models.IotHubConnectionProperties.IotHubConnectionProperties](#adxcontrolmodelsiothubconnectionpropertiesiothubconnectionproperties) + * [adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum.IotHubConnectionPropertiesDatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionpropertiesdatabaseroutingenumiothubconnectionpropertiesdatabaseroutingenum) + * [adx.control.models.IotHubConnectionProperties_1](#adxcontrolmodelsiothubconnectionproperties_1) + * [adx.control.models.IotHubConnectionProperties_1.IotHubConnectionProperties_1](#adxcontrolmodelsiothubconnectionproperties_1iothubconnectionproperties_1) + * [adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionproperties_1databaseroutingenum) + * [adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum.IotHubConnectionProperties_1DatabaseRoutingEnum](#adxcontrolmodelsiothubconnectionproperties_1databaseroutingenumiothubconnectionproperties_1databaseroutingenum) + * [adx.control.models.IotHubDataConnection](#adxcontrolmodelsiothubdataconnection) + * [adx.control.models.IotHubDataConnection.IotHubDataConnection](#adxcontrolmodelsiothubdataconnectioniothubdataconnection) + * [adx.control.models.IotHubDataFormat](#adxcontrolmodelsiothubdataformat) + * [adx.control.models.IotHubDataFormat.IotHubDataFormat](#adxcontrolmodelsiothubdataformatiothubdataformat) + * [adx.control.models.KeyVaultProperties](#adxcontrolmodelskeyvaultproperties) + * [adx.control.models.KeyVaultProperties.KeyVaultProperties](#adxcontrolmodelskeyvaultpropertieskeyvaultproperties) + * [adx.control.models.LanguageExtension](#adxcontrolmodelslanguageextension) + * [adx.control.models.LanguageExtension.LanguageExtension](#adxcontrolmodelslanguageextensionlanguageextension) + * [adx.control.models.LanguageExtensionImageName](#adxcontrolmodelslanguageextensionimagename) + * [adx.control.models.LanguageExtensionImageName.LanguageExtensionImageName](#adxcontrolmodelslanguageextensionimagenamelanguageextensionimagename) + * [adx.control.models.LanguageExtensionName](#adxcontrolmodelslanguageextensionname) + * [adx.control.models.LanguageExtensionName.LanguageExtensionName](#adxcontrolmodelslanguageextensionnamelanguageextensionname) + * [adx.control.models.LanguageExtension_1](#adxcontrolmodelslanguageextension_1) + * [adx.control.models.LanguageExtension_1.LanguageExtension_1](#adxcontrolmodelslanguageextension_1languageextension_1) + * [adx.control.models.LanguageExtensionsList](#adxcontrolmodelslanguageextensionslist) + * [adx.control.models.LanguageExtensionsList.LanguageExtensionsList](#adxcontrolmodelslanguageextensionslistlanguageextensionslist) + * [adx.control.models.ListResourceSkusResult](#adxcontrolmodelslistresourceskusresult) + * [adx.control.models.ListResourceSkusResult.ListResourceSkusResult](#adxcontrolmodelslistresourceskusresultlistresourceskusresult) + * [adx.control.models.ManagedPrivateEndpoint](#adxcontrolmodelsmanagedprivateendpoint) + * [adx.control.models.ManagedPrivateEndpoint.ManagedPrivateEndpoint](#adxcontrolmodelsmanagedprivateendpointmanagedprivateendpoint) + * [adx.control.models.ManagedPrivateEndpointListResult](#adxcontrolmodelsmanagedprivateendpointlistresult) + * [adx.control.models.ManagedPrivateEndpointListResult.ManagedPrivateEndpointListResult](#adxcontrolmodelsmanagedprivateendpointlistresultmanagedprivateendpointlistresult) + * [adx.control.models.ManagedPrivateEndpointProperties](#adxcontrolmodelsmanagedprivateendpointproperties) + * [adx.control.models.ManagedPrivateEndpointProperties.ManagedPrivateEndpointProperties](#adxcontrolmodelsmanagedprivateendpointpropertiesmanagedprivateendpointproperties) + * [adx.control.models.ManagedPrivateEndpointProperties_1](#adxcontrolmodelsmanagedprivateendpointproperties_1) + * [adx.control.models.ManagedPrivateEndpointProperties_1.ManagedPrivateEndpointProperties_1](#adxcontrolmodelsmanagedprivateendpointproperties_1managedprivateendpointproperties_1) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequest](#adxcontrolmodelsmanagedprivateendpointschecknamerequest) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequest.ManagedPrivateEndpointsCheckNameRequest](#adxcontrolmodelsmanagedprivateendpointschecknamerequestmanagedprivateendpointschecknamerequest) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum](#adxcontrolmodelsmanagedprivateendpointschecknamerequesttypeenum) + * [adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum.ManagedPrivateEndpointsCheckNameRequestTypeEnum](#adxcontrolmodelsmanagedprivateendpointschecknamerequesttypeenummanagedprivateendpointschecknamerequesttypeenum) + * [adx.control.models.MigrationClusterProperties](#adxcontrolmodelsmigrationclusterproperties) + * [adx.control.models.MigrationClusterProperties.MigrationClusterProperties](#adxcontrolmodelsmigrationclusterpropertiesmigrationclusterproperties) + * [adx.control.models.MigrationClusterPropertiesRoleEnum](#adxcontrolmodelsmigrationclusterpropertiesroleenum) + * [adx.control.models.MigrationClusterPropertiesRoleEnum.MigrationClusterPropertiesRoleEnum](#adxcontrolmodelsmigrationclusterpropertiesroleenummigrationclusterpropertiesroleenum) + * [adx.control.models.Operation](#adxcontrolmodelsoperation) + * [adx.control.models.Operation.Operation](#adxcontrolmodelsoperationoperation) + * [adx.control.models.OperationListResult](#adxcontrolmodelsoperationlistresult) + * [adx.control.models.OperationListResult.OperationListResult](#adxcontrolmodelsoperationlistresultoperationlistresult) + * [adx.control.models.OperationResult](#adxcontrolmodelsoperationresult) + * [adx.control.models.OperationResult.OperationResult](#adxcontrolmodelsoperationresultoperationresult) + * [adx.control.models.OperationResultErrorProperties](#adxcontrolmodelsoperationresulterrorproperties) + * [adx.control.models.OperationResultErrorProperties.OperationResultErrorProperties](#adxcontrolmodelsoperationresulterrorpropertiesoperationresulterrorproperties) + * [adx.control.models.OperationResultProperties](#adxcontrolmodelsoperationresultproperties) + * [adx.control.models.OperationResultProperties.OperationResultProperties](#adxcontrolmodelsoperationresultpropertiesoperationresultproperties) + * [adx.control.models.OptimizedAutoscale](#adxcontrolmodelsoptimizedautoscale) + * [adx.control.models.OptimizedAutoscale.OptimizedAutoscale](#adxcontrolmodelsoptimizedautoscaleoptimizedautoscale) + * [adx.control.models.OutboundNetworkDependenciesEndpoint](#adxcontrolmodelsoutboundnetworkdependenciesendpoint) + * [adx.control.models.OutboundNetworkDependenciesEndpoint.OutboundNetworkDependenciesEndpoint](#adxcontrolmodelsoutboundnetworkdependenciesendpointoutboundnetworkdependenciesendpoint) + * [adx.control.models.OutboundNetworkDependenciesEndpointListResult](#adxcontrolmodelsoutboundnetworkdependenciesendpointlistresult) + * [adx.control.models.OutboundNetworkDependenciesEndpointListResult.OutboundNetworkDependenciesEndpointListResult](#adxcontrolmodelsoutboundnetworkdependenciesendpointlistresultoutboundnetworkdependenciesendpointlistresult) + * [adx.control.models.OutboundNetworkDependenciesEndpointProperties](#adxcontrolmodelsoutboundnetworkdependenciesendpointproperties) + * [adx.control.models.OutboundNetworkDependenciesEndpointProperties.OutboundNetworkDependenciesEndpointProperties](#adxcontrolmodelsoutboundnetworkdependenciesendpointpropertiesoutboundnetworkdependenciesendpointproperties) + * [adx.control.models.PrivateEndpointConnection](#adxcontrolmodelsprivateendpointconnection) + * [adx.control.models.PrivateEndpointConnection.PrivateEndpointConnection](#adxcontrolmodelsprivateendpointconnectionprivateendpointconnection) + * [adx.control.models.PrivateEndpointConnectionListResult](#adxcontrolmodelsprivateendpointconnectionlistresult) + * [adx.control.models.PrivateEndpointConnectionListResult.PrivateEndpointConnectionListResult](#adxcontrolmodelsprivateendpointconnectionlistresultprivateendpointconnectionlistresult) + * [adx.control.models.PrivateEndpointConnectionProperties](#adxcontrolmodelsprivateendpointconnectionproperties) + * [adx.control.models.PrivateEndpointConnectionProperties.PrivateEndpointConnectionProperties](#adxcontrolmodelsprivateendpointconnectionpropertiesprivateendpointconnectionproperties) + * [adx.control.models.PrivateEndpointProperty](#adxcontrolmodelsprivateendpointproperty) + * [adx.control.models.PrivateEndpointProperty.PrivateEndpointProperty](#adxcontrolmodelsprivateendpointpropertyprivateendpointproperty) + * [adx.control.models.PrivateLinkResource](#adxcontrolmodelsprivatelinkresource) + * [adx.control.models.PrivateLinkResource.PrivateLinkResource](#adxcontrolmodelsprivatelinkresourceprivatelinkresource) + * [adx.control.models.PrivateLinkResourceListResult](#adxcontrolmodelsprivatelinkresourcelistresult) + * [adx.control.models.PrivateLinkResourceListResult.PrivateLinkResourceListResult](#adxcontrolmodelsprivatelinkresourcelistresultprivatelinkresourcelistresult) + * [adx.control.models.PrivateLinkResourceProperties](#adxcontrolmodelsprivatelinkresourceproperties) + * [adx.control.models.PrivateLinkResourceProperties.PrivateLinkResourceProperties](#adxcontrolmodelsprivatelinkresourcepropertiesprivatelinkresourceproperties) + * [adx.control.models.PrivateLinkServiceConnectionStateProperty](#adxcontrolmodelsprivatelinkserviceconnectionstateproperty) + * [adx.control.models.PrivateLinkServiceConnectionStateProperty.PrivateLinkServiceConnectionStateProperty](#adxcontrolmodelsprivatelinkserviceconnectionstatepropertyprivatelinkserviceconnectionstateproperty) + * [adx.control.models.ProvisioningState](#adxcontrolmodelsprovisioningstate) + * [adx.control.models.ProvisioningState.ProvisioningState](#adxcontrolmodelsprovisioningstateprovisioningstate) + * [adx.control.models.ProxyResource](#adxcontrolmodelsproxyresource) + * [adx.control.models.ProxyResource.ProxyResource](#adxcontrolmodelsproxyresourceproxyresource) + * [adx.control.models.ReadOnlyFollowingDatabase](#adxcontrolmodelsreadonlyfollowingdatabase) + * [adx.control.models.ReadOnlyFollowingDatabase.ReadOnlyFollowingDatabase](#adxcontrolmodelsreadonlyfollowingdatabasereadonlyfollowingdatabase) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0000) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0000readonlyfollowingdatabaseproprincipalsmodificationkindenum_0000) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0001) + * [adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001](#adxcontrolmodelsreadonlyfollowingdatabaseproprincipalsmodificationkindenum_0001readonlyfollowingdatabaseproprincipalsmodificationkindenum_0001) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties](#adxcontrolmodelsreadonlyfollowingdatabaseproperties) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties.ReadOnlyFollowingDatabaseProperties](#adxcontrolmodelsreadonlyfollowingdatabasepropertiesreadonlyfollowingdatabaseproperties) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties_1](#adxcontrolmodelsreadonlyfollowingdatabaseproperties_1) + * [adx.control.models.ReadOnlyFollowingDatabaseProperties_1.ReadOnlyFollowingDatabaseProperties_1](#adxcontrolmodelsreadonlyfollowingdatabaseproperties_1readonlyfollowingdatabaseproperties_1) + * [adx.control.models.ReadWriteDatabase](#adxcontrolmodelsreadwritedatabase) + * [adx.control.models.ReadWriteDatabase.ReadWriteDatabase](#adxcontrolmodelsreadwritedatabasereadwritedatabase) + * [adx.control.models.ReadWriteDatabaseProperties](#adxcontrolmodelsreadwritedatabaseproperties) + * [adx.control.models.ReadWriteDatabaseProperties.ReadWriteDatabaseProperties](#adxcontrolmodelsreadwritedatabasepropertiesreadwritedatabaseproperties) + * [adx.control.models.ReadWriteDatabaseProperties_1](#adxcontrolmodelsreadwritedatabaseproperties_1) + * [adx.control.models.ReadWriteDatabaseProperties_1.ReadWriteDatabaseProperties_1](#adxcontrolmodelsreadwritedatabaseproperties_1readwritedatabaseproperties_1) + * [adx.control.models.Resource](#adxcontrolmodelsresource) + * [adx.control.models.Resource.Resource](#adxcontrolmodelsresourceresource) + * [adx.control.models.ResourceSkuCapabilities](#adxcontrolmodelsresourceskucapabilities) + * [adx.control.models.ResourceSkuCapabilities.ResourceSkuCapabilities](#adxcontrolmodelsresourceskucapabilitiesresourceskucapabilities) + * [adx.control.models.ResourceSkuZoneDetails](#adxcontrolmodelsresourceskuzonedetails) + * [adx.control.models.ResourceSkuZoneDetails.ResourceSkuZoneDetails](#adxcontrolmodelsresourceskuzonedetailsresourceskuzonedetails) + * [adx.control.models.Script](#adxcontrolmodelsscript) + * [adx.control.models.Script.Script](#adxcontrolmodelsscriptscript) + * [adx.control.models.ScriptCheckNameRequest](#adxcontrolmodelsscriptchecknamerequest) + * [adx.control.models.ScriptCheckNameRequest.ScriptCheckNameRequest](#adxcontrolmodelsscriptchecknamerequestscriptchecknamerequest) + * [adx.control.models.ScriptCheckNameRequestTypeEnum](#adxcontrolmodelsscriptchecknamerequesttypeenum) + * [adx.control.models.ScriptCheckNameRequestTypeEnum.ScriptCheckNameRequestTypeEnum](#adxcontrolmodelsscriptchecknamerequesttypeenumscriptchecknamerequesttypeenum) + * [adx.control.models.ScriptListResult](#adxcontrolmodelsscriptlistresult) + * [adx.control.models.ScriptListResult.ScriptListResult](#adxcontrolmodelsscriptlistresultscriptlistresult) + * [adx.control.models.ScriptProperties](#adxcontrolmodelsscriptproperties) + * [adx.control.models.ScriptProperties.ScriptProperties](#adxcontrolmodelsscriptpropertiesscriptproperties) + * [adx.control.models.ScriptProperties_1](#adxcontrolmodelsscriptproperties_1) + * [adx.control.models.ScriptProperties_1.ScriptProperties_1](#adxcontrolmodelsscriptproperties_1scriptproperties_1) + * [adx.control.models.SkuDescription](#adxcontrolmodelsskudescription) + * [adx.control.models.SkuDescription.SkuDescription](#adxcontrolmodelsskudescriptionskudescription) + * [adx.control.models.SkuDescriptionList](#adxcontrolmodelsskudescriptionlist) + * [adx.control.models.SkuDescriptionList.SkuDescriptionList](#adxcontrolmodelsskudescriptionlistskudescriptionlist) + * [adx.control.models.SkuLocationInfoItem](#adxcontrolmodelsskulocationinfoitem) + * [adx.control.models.SkuLocationInfoItem.SkuLocationInfoItem](#adxcontrolmodelsskulocationinfoitemskulocationinfoitem) + * [adx.control.models.Status](#adxcontrolmodelsstatus) + * [adx.control.models.Status.Status](#adxcontrolmodelsstatusstatus) + * [adx.control.models.SuspensionDetails](#adxcontrolmodelssuspensiondetails) + * [adx.control.models.SuspensionDetails.SuspensionDetails](#adxcontrolmodelssuspensiondetailssuspensiondetails) + * [adx.control.models.TableLevelSharingProperties](#adxcontrolmodelstablelevelsharingproperties) + * [adx.control.models.TableLevelSharingProperties.TableLevelSharingProperties](#adxcontrolmodelstablelevelsharingpropertiestablelevelsharingproperties) + * [adx.control.models.The_object_that_describes_the_operation_](#adxcontrolmodelsthe_object_that_describes_the_operation_) + * [adx.control.models.The_object_that_describes_the_operation_.The_object_that_describes_the_operation_](#adxcontrolmodelsthe_object_that_describes_the_operation_the_object_that_describes_the_operation_) + * [adx.control.models.TrackedResource](#adxcontrolmodelstrackedresource) + * [adx.control.models.TrackedResource.TrackedResource](#adxcontrolmodelstrackedresourcetrackedresource) + * [adx.control.models.TrustedExternalTenant](#adxcontrolmodelstrustedexternaltenant) + * [adx.control.models.TrustedExternalTenant.TrustedExternalTenant](#adxcontrolmodelstrustedexternaltenanttrustedexternaltenant) + * [adx.control.models.VirtualNetworkConfiguration](#adxcontrolmodelsvirtualnetworkconfiguration) + * [adx.control.models.VirtualNetworkConfiguration.VirtualNetworkConfiguration](#adxcontrolmodelsvirtualnetworkconfigurationvirtualnetworkconfiguration) + * [adx.control.models.systemData](#adxcontrolmodelssystemdata) + * [adx.control.models.systemData.systemData](#adxcontrolmodelssystemdatasystemdata) + * [adx.control.models.systemDataCreatedByTypeEnum](#adxcontrolmodelssystemdatacreatedbytypeenum) + * [adx.control.models.systemDataCreatedByTypeEnum.systemDataCreatedByTypeEnum](#adxcontrolmodelssystemdatacreatedbytypeenumsystemdatacreatedbytypeenum) + * [adx.control.models.systemDataLastModifiedByTypeEnum](#adxcontrolmodelssystemdatalastmodifiedbytypeenum) + * [adx.control.models.systemDataLastModifiedByTypeEnum.systemDataLastModifiedByTypeEnum](#adxcontrolmodelssystemdatalastmodifiedbytypeenumsystemdatalastmodifiedbytypeenum) + * [adx.control.BaseClient](#adxcontrolbaseclient) + * [adx.control.BaseClient.BaseClient](#adxcontrolbaseclientbaseclient) + * [adx.control.BaseClient.applyCookies](#adxcontrolbaseclientapplycookies) + * [adx.control.BaseClient.getOAuthToken](#adxcontrolbaseclientgetoauthtoken) + * [adx.control.BaseClient.getPropertyGroups](#adxcontrolbaseclientgetpropertygroups) + * [adx.control.BaseClient.loadConfigFile](#adxcontrolbaseclientloadconfigfile) + * [adx.control.BaseClient.postSend](#adxcontrolbaseclientpostsend) + * [adx.control.BaseClient.preSend](#adxcontrolbaseclientpresend) + * [adx.control.BaseClient.requestAuth](#adxcontrolbaseclientrequestauth) + * [adx.control.BaseClient.setCookies](#adxcontrolbaseclientsetcookies) + * [adx.control.CookieJar](#adxcontrolcookiejar) + * [adx.control.CookieJar.CookieJar](#adxcontrolcookiejarcookiejar) + * [adx.control.CookieJar.getCookies](#adxcontrolcookiejargetcookies) + * [adx.control.CookieJar.load](#adxcontrolcookiejarload) + * [adx.control.CookieJar.persist](#adxcontrolcookiejarpersist) + * [adx.control.CookieJar.purge](#adxcontrolcookiejarpurge) + * [adx.control.CookieJar.setCookies](#adxcontrolcookiejarsetcookies) + * [adx.control.JSONEnum](#adxcontroljsonenum) + * [adx.control.JSONEnum.JSONEnum](#adxcontroljsonenumjsonenum) + * [adx.control.JSONEnum.fromJSON](#adxcontroljsonenumfromjson) + * [adx.control.JSONMapper](#adxcontroljsonmapper) + * [adx.control.JSONMapper.ConstructorArgument](#adxcontroljsonmapperconstructorargument) + * [adx.control.JSONMapper.JSONArray](#adxcontroljsonmapperjsonarray) + * [adx.control.JSONMapper.JSONMapper](#adxcontroljsonmapperjsonmapper) + * [adx.control.JSONMapper.doNotParse](#adxcontroljsonmapperdonotparse) + * [adx.control.JSONMapper.epochDatetime](#adxcontroljsonmapperepochdatetime) + * [adx.control.JSONMapper.fieldName](#adxcontroljsonmapperfieldname) + * [adx.control.JSONMapper.fromJSON](#adxcontroljsonmapperfromjson) + * [adx.control.JSONMapper.getPayload](#adxcontroljsonmappergetpayload) + * [adx.control.JSONMapper.jsonencode](#adxcontroljsonmapperjsonencode) + * [adx.control.JSONMapper.stringDatetime](#adxcontroljsonmapperstringdatetime) + * [adx.control.JSONMapperMap](#adxcontroljsonmappermap) + * [adx.control.JSONMapperMap.JSONMapperMap](#adxcontroljsonmappermapjsonmappermap) + * [adx.control.JSONMapperMap.disp](#adxcontroljsonmappermapdisp) + * [adx.control.JSONMapperMap.jsonencode](#adxcontroljsonmappermapjsonencode) + * [adx.control.JSONMapperMap.subsasgn](#adxcontroljsonmappermapsubsasgn) + * [adx.control.JSONMapperMap.subsref](#adxcontroljsonmappermapsubsref) + * [adx.control.JSONPropertyInfo](#adxcontroljsonpropertyinfo) + * [adx.control.JSONPropertyInfo.JSONPropertyInfo](#adxcontroljsonpropertyinfojsonpropertyinfo) + * [adx.control.JSONPropertyInfo.getPropertyInfo](#adxcontroljsonpropertyinfogetpropertyinfo) + * [adx.data](#adxdata) + * [adx.data.api](#adxdataapi) + * [adx.data.api.Ingest](#adxdataapiingest) + * [adx.data.api.Ingest.Ingest](#adxdataapiingestingest) + * [adx.data.api.Ingest.ingestRun](#adxdataapiingestingestrun) + * [adx.data.api.Management](#adxdataapimanagement) + * [adx.data.api.Management.Management](#adxdataapimanagementmanagement) + * [adx.data.api.Management.getPropertyGroups](#adxdataapimanagementgetpropertygroups) + * [adx.data.api.Management.managementRun](#adxdataapimanagementmanagementrun) + * [adx.data.api.Query](#adxdataapiquery) + * [adx.data.api.Query.Query](#adxdataapiqueryquery) + * [adx.data.api.Query.queryRun](#adxdataapiqueryqueryrun) + * [adx.data.models](#adxdatamodels) + * [adx.data.models.ClientRequestProperties](#adxdatamodelsclientrequestproperties) + * [adx.data.models.ClientRequestProperties.ClientRequestProperties](#adxdatamodelsclientrequestpropertiesclientrequestproperties) + * [adx.data.models.ClientRequestPropertiesOptions](#adxdatamodelsclientrequestpropertiesoptions) + * [adx.data.models.ClientRequestPropertiesOptions.ClientRequestPropertiesOptions](#adxdatamodelsclientrequestpropertiesoptionsclientrequestpropertiesoptions) + * [adx.data.models.Column](#adxdatamodelscolumn) + * [adx.data.models.Column.Column](#adxdatamodelscolumncolumn) + * [adx.data.models.ColumnV1](#adxdatamodelscolumnv1) + * [adx.data.models.ColumnV1.ColumnV1](#adxdatamodelscolumnv1columnv1) + * [adx.data.models.DataSetCompletion](#adxdatamodelsdatasetcompletion) + * [adx.data.models.DataSetCompletion.DataSetCompletion](#adxdatamodelsdatasetcompletiondatasetcompletion) + * [adx.data.models.DataSetHeader](#adxdatamodelsdatasetheader) + * [adx.data.models.DataSetHeader.DataSetHeader](#adxdatamodelsdatasetheaderdatasetheader) + * [adx.data.models.DataTable](#adxdatamodelsdatatable) + * [adx.data.models.DataTable.DataTable](#adxdatamodelsdatatabledatatable) + * [adx.data.models.DataTableV1](#adxdatamodelsdatatablev1) + * [adx.data.models.DataTableV1.DataTableV1](#adxdatamodelsdatatablev1datatablev1) + * [adx.data.models.DataTables](#adxdatamodelsdatatables) + * [adx.data.models.DataTables.DataTables](#adxdatamodelsdatatablesdatatables) + * [adx.data.models.DataTablesV1](#adxdatamodelsdatatablesv1) + * [adx.data.models.DataTablesV1.DataTablesV1](#adxdatamodelsdatatablesv1datatablesv1) + * [adx.data.models.IngestionResourcesSnapshot](#adxdatamodelsingestionresourcessnapshot) + * [adx.data.models.IngestionResourcesSnapshot.IngestionResourcesSnapshot](#adxdatamodelsingestionresourcessnapshotingestionresourcessnapshot) + * [adx.data.models.IngestionResourcesSnapshot.table](#adxdatamodelsingestionresourcessnapshottable) + * [adx.data.models.ManagementRequest](#adxdatamodelsmanagementrequest) + * [adx.data.models.ManagementRequest.ManagementRequest](#adxdatamodelsmanagementrequestmanagementrequest) + * [adx.data.models.QueryParameter](#adxdatamodelsqueryparameter) + * [adx.data.models.QueryParameter.QueryParameter](#adxdatamodelsqueryparameterqueryparameter) + * [adx.data.models.QueryRequest](#adxdatamodelsqueryrequest) + * [adx.data.models.QueryRequest.QueryRequest](#adxdatamodelsqueryrequestqueryrequest) + * [adx.data.models.QueryV1ResponseRaw](#adxdatamodelsqueryv1responseraw) + * [adx.data.models.QueryV1ResponseRaw.QueryV1ResponseRaw](#adxdatamodelsqueryv1responserawqueryv1responseraw) + * [adx.data.models.QueryV2ResponseRaw](#adxdatamodelsqueryv2responseraw) + * [adx.data.models.QueryV2ResponseRaw.QueryV2ResponseRaw](#adxdatamodelsqueryv2responserawqueryv2responseraw) + * [adx.data.models.QueryV2ResponseRaw.getDataSetCompletionFrame](#adxdatamodelsqueryv2responserawgetdatasetcompletionframe) + * [adx.data.models.QueryV2ResponseRaw.getDataSetHeader](#adxdatamodelsqueryv2responserawgetdatasetheader) + * [adx.data.models.QueryV2ResponseUnparsedRows](#adxdatamodelsqueryv2responseunparsedrows) + * [adx.data.models.QueryV2ResponseUnparsedRows.QueryV2ResponseUnparsedRows](#adxdatamodelsqueryv2responseunparsedrowsqueryv2responseunparsedrows) + * [adx.data.models.QueryV2ResponseUnparsedRows.getDataSetCompletionFrame](#adxdatamodelsqueryv2responseunparsedrowsgetdatasetcompletionframe) + * [adx.data.models.QueryV2ResponseUnparsedRows.getDataSetHeader](#adxdatamodelsqueryv2responseunparsedrowsgetdatasetheader) + * [adx.data.models.QueueIngestionMessage](#adxdatamodelsqueueingestionmessage) + * [adx.data.models.QueueIngestionMessage.QueueIngestionMessage](#adxdatamodelsqueueingestionmessagequeueingestionmessage) + * [adx.data.models.Row](#adxdatamodelsrow) + * [adx.data.models.Row.Row](#adxdatamodelsrowrow) + * [adx.data.models.RowUnparsed](#adxdatamodelsrowunparsed) + * [adx.data.models.RowUnparsed.RowUnparsed](#adxdatamodelsrowunparsedrowunparsed) + * [adx.data.models.RowsUnparsed](#adxdatamodelsrowsunparsed) + * [adx.data.models.RowsUnparsed.RowsUnparsed](#adxdatamodelsrowsunparsedrowsunparsed) + * [adx.data.models.StreamFormat](#adxdatamodelsstreamformat) + * [adx.data.models.StreamFormat.StreamFormat](#adxdatamodelsstreamformatstreamformat) + * [adx.data.models.TableCompletion](#adxdatamodelstablecompletion) + * [adx.data.models.TableCompletion.TableCompletion](#adxdatamodelstablecompletiontablecompletion) + * [adx.data.models.TableFragment](#adxdatamodelstablefragment) + * [adx.data.models.TableFragment.TableFragment](#adxdatamodelstablefragmenttablefragment) + * [adx.data.models.TableFragmentType](#adxdatamodelstablefragmenttype) + * [adx.data.models.TableFragmentType.TableFragmentType](#adxdatamodelstablefragmenttypetablefragmenttype) + * [adx.data.models.TableHeader](#adxdatamodelstableheader) + * [adx.data.models.TableHeader.TableHeader](#adxdatamodelstableheadertableheader) + * [adx.data.models.TableKind](#adxdatamodelstablekind) + * [adx.data.models.TableKind.TableKind](#adxdatamodelstablekindtablekind) + * [adx.data.models.TableProgress](#adxdatamodelstableprogress) + * [adx.data.models.TableProgress.TableProgress](#adxdatamodelstableprogresstableprogress) + * [azure](#azure) + * [azure.core](#azurecore) + * [azure.core.credential](#azurecorecredential) + * [azure.core.credential.AccessToken](#azurecorecredentialaccesstoken) + * [azure.core.credential.AccessToken.AccessToken](#azurecorecredentialaccesstokenaccesstoken) + * [azure.core.credential.AccessToken.getToken](#azurecorecredentialaccesstokengettoken) + * [azure.core.credential.AccessToken.isExpired](#azurecorecredentialaccesstokenisexpired) + * [azure.core.credential.AzureSasCredential](#azurecorecredentialazuresascredential) + * [azure.core.credential.AzureSasCredential.AzureSasCredential](#azurecorecredentialazuresascredentialazuresascredential) + * [azure.core.credential.AzureSasCredential.AzureSasSignature](#azurecorecredentialazuresascredentialazuresassignature) + * [azure.core.credential.AzureSasCredential.getSignature](#azurecorecredentialazuresascredentialgetsignature) + * [azure.core.credential.AzureSasCredential.update](#azurecorecredentialazuresascredentialupdate) + * [azure.core.credential.TokenCredential](#azurecorecredentialtokencredential) + * [azure.core.credential.TokenCredential.TokenCredential](#azurecorecredentialtokencredentialtokencredential) + * [azure.core.credential.TokenCredential.getToken](#azurecorecredentialtokencredentialgettoken) + * [azure.core.credential.TokenCredential.getTokenSync](#azurecorecredentialtokencredentialgettokensync) + * [azure.core.credential.TokenRequestContext](#azurecorecredentialtokenrequestcontext) + * [azure.core.credential.TokenRequestContext.TokenRequestContext](#azurecorecredentialtokenrequestcontexttokenrequestcontext) + * [azure.core.credential.TokenRequestContext.addScopes](#azurecorecredentialtokenrequestcontextaddscopes) + * [azure.core.credential.TokenRequestContext.getClaims](#azurecorecredentialtokenrequestcontextgetclaims) + * [azure.core.credential.TokenRequestContext.getScopes](#azurecorecredentialtokenrequestcontextgetscopes) + * [azure.core.credential.TokenRequestContext.getTenantId](#azurecorecredentialtokenrequestcontextgettenantid) + * [azure.core.credential.TokenRequestContext.setClaims](#azurecorecredentialtokenrequestcontextsetclaims) + * [azure.core.credential.TokenRequestContext.setTenantId](#azurecorecredentialtokenrequestcontextsettenantid) + * [azure.core.util](#azurecoreutil) + * [azure.core.util.polling](#azurecoreutilpolling) + * [azure.core.util.polling.LongRunningOperationStatus](#azurecoreutilpollinglongrunningoperationstatus) + * [azure.core.util.polling.LongRunningOperationStatus.LongRunningOperationStatus](#azurecoreutilpollinglongrunningoperationstatuslongrunningoperationstatus) + * [azure.core.util.polling.LongRunningOperationStatus.fromString](#azurecoreutilpollinglongrunningoperationstatusfromstring) + * [azure.core.util.polling.LongRunningOperationStatus.isComplete](#azurecoreutilpollinglongrunningoperationstatusiscomplete) + * [azure.core.util.polling.LongRunningOperationStatus.toString](#azurecoreutilpollinglongrunningoperationstatustostring) + * [azure.core.util.polling.PollResponse](#azurecoreutilpollingpollresponse) + * [azure.core.util.polling.PollResponse.PollResponse](#azurecoreutilpollingpollresponsepollresponse) + * [azure.core.util.polling.PollResponse.getRetryAfter](#azurecoreutilpollingpollresponsegetretryafter) + * [azure.core.util.polling.PollResponse.getStatus](#azurecoreutilpollingpollresponsegetstatus) + * [azure.core.util.polling.PollResponse.getValue](#azurecoreutilpollingpollresponsegetvalue) + * [azure.core.util.polling.SyncPoller](#azurecoreutilpollingsyncpoller) + * [azure.core.util.polling.SyncPoller.SyncPoller](#azurecoreutilpollingsyncpollersyncpoller) + * [azure.core.util.polling.SyncPoller.cancelOperation](#azurecoreutilpollingsyncpollercanceloperation) + * [azure.core.util.polling.SyncPoller.poll](#azurecoreutilpollingsyncpollerpoll) + * [azure.core.util.polling.SyncPoller.waitForCompletion](#azurecoreutilpollingsyncpollerwaitforcompletion) + * [azure.identity](#azureidentity) + * [azure.identity.AuthenticationRecord](#azureidentityauthenticationrecord) + * [azure.identity.AuthenticationRecord.AuthenticationRecord](#azureidentityauthenticationrecordauthenticationrecord) + * [azure.identity.AuthenticationRecord.subscribe](#azureidentityauthenticationrecordsubscribe) + * [azure.identity.AzureCliCredential](#azureidentityazureclicredential) + * [azure.identity.AzureCliCredential.AzureCliCredential](#azureidentityazureclicredentialazureclicredential) + * [azure.identity.AzureCliCredentialBuilder](#azureidentityazureclicredentialbuilder) + * [azure.identity.AzureCliCredentialBuilder.AzureCliCredentialBuilder](#azureidentityazureclicredentialbuilderazureclicredentialbuilder) + * [azure.identity.AzureCliCredentialBuilder.build](#azureidentityazureclicredentialbuilderbuild) + * [azure.identity.ChainedTokenCredential](#azureidentitychainedtokencredential) + * [azure.identity.ChainedTokenCredential.ChainedTokenCredential](#azureidentitychainedtokencredentialchainedtokencredential) + * [azure.identity.ChainedTokenCredentialBuilder](#azureidentitychainedtokencredentialbuilder) + * [azure.identity.ChainedTokenCredentialBuilder.ChainedTokenCredentialBuilder](#azureidentitychainedtokencredentialbuilderchainedtokencredentialbuilder) + * [azure.identity.ChainedTokenCredentialBuilder.addLast](#azureidentitychainedtokencredentialbuilderaddlast) + * [azure.identity.ChainedTokenCredentialBuilder.build](#azureidentitychainedtokencredentialbuilderbuild) + * [azure.identity.ClientCertificateCredential](#azureidentityclientcertificatecredential) + * [azure.identity.ClientCertificateCredential.ClientCertificateCredential](#azureidentityclientcertificatecredentialclientcertificatecredential) + * [azure.identity.ClientCertificateCredentialBuilder](#azureidentityclientcertificatecredentialbuilder) + * [azure.identity.ClientCertificateCredentialBuilder.ClientCertificateCredentialBuilder](#azureidentityclientcertificatecredentialbuilderclientcertificatecredentialbuilder) + * [azure.identity.ClientCertificateCredentialBuilder.authorityHost](#azureidentityclientcertificatecredentialbuilderauthorityhost) + * [azure.identity.ClientCertificateCredentialBuilder.build](#azureidentityclientcertificatecredentialbuilderbuild) + * [azure.identity.ClientCertificateCredentialBuilder.clientId](#azureidentityclientcertificatecredentialbuilderclientid) + * [azure.identity.ClientCertificateCredentialBuilder.pemCertificate](#azureidentityclientcertificatecredentialbuilderpemcertificate) + * [azure.identity.ClientCertificateCredentialBuilder.tenantId](#azureidentityclientcertificatecredentialbuildertenantid) + * [azure.identity.ClientSecretCredential](#azureidentityclientsecretcredential) + * [azure.identity.ClientSecretCredential.ClientSecretCredential](#azureidentityclientsecretcredentialclientsecretcredential) + * [azure.identity.ClientSecretCredentialBuilder](#azureidentityclientsecretcredentialbuilder) + * [azure.identity.ClientSecretCredentialBuilder.ClientSecretCredentialBuilder](#azureidentityclientsecretcredentialbuilderclientsecretcredentialbuilder) + * [azure.identity.ClientSecretCredentialBuilder.authorityHost](#azureidentityclientsecretcredentialbuilderauthorityhost) + * [azure.identity.ClientSecretCredentialBuilder.build](#azureidentityclientsecretcredentialbuilderbuild) + * [azure.identity.ClientSecretCredentialBuilder.clientId](#azureidentityclientsecretcredentialbuilderclientid) + * [azure.identity.ClientSecretCredentialBuilder.clientSecret](#azureidentityclientsecretcredentialbuilderclientsecret) + * [azure.identity.ClientSecretCredentialBuilder.tenantId](#azureidentityclientsecretcredentialbuildertenantid) + * [azure.identity.CredentialBuilderBase](#azureidentitycredentialbuilderbase) + * [azure.identity.CredentialBuilderBase.CredentialBuilderBase](#azureidentitycredentialbuilderbasecredentialbuilderbase) + * [azure.identity.CredentialBuilderBase.httpClient](#azureidentitycredentialbuilderbasehttpclient) + * [azure.identity.DefaultAzureCredential](#azureidentitydefaultazurecredential) + * [azure.identity.DefaultAzureCredential.DefaultAzureCredential](#azureidentitydefaultazurecredentialdefaultazurecredential) + * [azure.identity.DefaultAzureCredentialBuilder](#azureidentitydefaultazurecredentialbuilder) + * [azure.identity.DefaultAzureCredentialBuilder.DefaultAzureCredentialBuilder](#azureidentitydefaultazurecredentialbuilderdefaultazurecredentialbuilder) + * [azure.identity.DefaultAzureCredentialBuilder.authorityHost](#azureidentitydefaultazurecredentialbuilderauthorityhost) + * [azure.identity.DefaultAzureCredentialBuilder.build](#azureidentitydefaultazurecredentialbuilderbuild) + * [azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId](#azureidentitydefaultazurecredentialbuildermanagedidentityclientid) + * [azure.identity.DefaultAzureCredentialBuilder.tenantId](#azureidentitydefaultazurecredentialbuildertenantid) + * [azure.identity.DeviceCodeCredential](#azureidentitydevicecodecredential) + * [azure.identity.DeviceCodeCredential.DeviceCodeCredential](#azureidentitydevicecodecredentialdevicecodecredential) + * [azure.identity.DeviceCodeCredential.authenticate](#azureidentitydevicecodecredentialauthenticate) + * [azure.identity.DeviceCodeCredentialBuilder](#azureidentitydevicecodecredentialbuilder) + * [azure.identity.DeviceCodeCredentialBuilder.DeviceCodeCredentialBuilder](#azureidentitydevicecodecredentialbuilderdevicecodecredentialbuilder) + * [azure.identity.DeviceCodeCredentialBuilder.authorityHost](#azureidentitydevicecodecredentialbuilderauthorityhost) + * [azure.identity.DeviceCodeCredentialBuilder.build](#azureidentitydevicecodecredentialbuilderbuild) + * [azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate](#azureidentitydevicecodecredentialbuilderbuildandauthenticate) + * [azure.identity.DeviceCodeCredentialBuilder.clientId](#azureidentitydevicecodecredentialbuilderclientid) + * [azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication](#azureidentitydevicecodecredentialbuilderdisableautomaticauthentication) + * [azure.identity.DeviceCodeCredentialBuilder.maxRetry](#azureidentitydevicecodecredentialbuildermaxretry) + * [azure.identity.DeviceCodeCredentialBuilder.tenantId](#azureidentitydevicecodecredentialbuildertenantid) + * [azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions](#azureidentitydevicecodecredentialbuildertokencachepersistenceoptions) + * [azure.identity.DeviceCodeInfo](#azureidentitydevicecodeinfo) + * [azure.identity.DeviceCodeInfo.DeviceCodeInfo](#azureidentitydevicecodeinfodevicecodeinfo) + * [azure.identity.DeviceCodeInfo.getExpiresOn](#azureidentitydevicecodeinfogetexpireson) + * [azure.identity.DeviceCodeInfo.getMessage](#azureidentitydevicecodeinfogetmessage) + * [azure.identity.DeviceCodeInfo.getUserCode](#azureidentitydevicecodeinfogetusercode) + * [azure.identity.DeviceCodeInfo.getVerificationUrl](#azureidentitydevicecodeinfogetverificationurl) + * [azure.identity.EnvironmentCredential](#azureidentityenvironmentcredential) + * [azure.identity.EnvironmentCredential.EnvironmentCredential](#azureidentityenvironmentcredentialenvironmentcredential) + * [azure.identity.EnvironmentCredentialBuilder](#azureidentityenvironmentcredentialbuilder) + * [azure.identity.EnvironmentCredentialBuilder.EnvironmentCredentialBuilder](#azureidentityenvironmentcredentialbuilderenvironmentcredentialbuilder) + * [azure.identity.EnvironmentCredentialBuilder.authorityHost](#azureidentityenvironmentcredentialbuilderauthorityhost) + * [azure.identity.EnvironmentCredentialBuilder.build](#azureidentityenvironmentcredentialbuilderbuild) + * [azure.identity.InteractiveBrowserCredential](#azureidentityinteractivebrowsercredential) + * [azure.identity.InteractiveBrowserCredential.InteractiveBrowserCredential](#azureidentityinteractivebrowsercredentialinteractivebrowsercredential) + * [azure.identity.InteractiveBrowserCredentialBuilder](#azureidentityinteractivebrowsercredentialbuilder) + * [azure.identity.InteractiveBrowserCredentialBuilder.InteractiveBrowserCredentialBuilder](#azureidentityinteractivebrowsercredentialbuilderinteractivebrowsercredentialbuilder) + * [azure.identity.InteractiveBrowserCredentialBuilder.authorityHost](#azureidentityinteractivebrowsercredentialbuilderauthorityhost) + * [azure.identity.InteractiveBrowserCredentialBuilder.build](#azureidentityinteractivebrowsercredentialbuilderbuild) + * [azure.identity.InteractiveBrowserCredentialBuilder.clientId](#azureidentityinteractivebrowsercredentialbuilderclientid) + * [azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl](#azureidentityinteractivebrowsercredentialbuilderredirecturl) + * [azure.identity.InteractiveBrowserCredentialBuilder.tenantId](#azureidentityinteractivebrowsercredentialbuildertenantid) + * [azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions](#azureidentityinteractivebrowsercredentialbuildertokencachepersistenceoptions) + * [azure.identity.ManagedIdentityCredential](#azureidentitymanagedidentitycredential) + * [azure.identity.ManagedIdentityCredential.ManagedIdentityCredential](#azureidentitymanagedidentitycredentialmanagedidentitycredential) + * [azure.identity.ManagedIdentityCredential.getClientId](#azureidentitymanagedidentitycredentialgetclientid) + * [azure.identity.ManagedIdentityCredentialBuilder](#azureidentitymanagedidentitycredentialbuilder) + * [azure.identity.ManagedIdentityCredentialBuilder.ManagedIdentityCredentialBuilder](#azureidentitymanagedidentitycredentialbuildermanagedidentitycredentialbuilder) + * [azure.identity.ManagedIdentityCredentialBuilder.build](#azureidentitymanagedidentitycredentialbuilderbuild) + * [azure.identity.ManagedIdentityCredentialBuilder.clientId](#azureidentitymanagedidentitycredentialbuilderclientid) + * [azure.identity.ManagedIdentityCredentialBuilder.maxRetry](#azureidentitymanagedidentitycredentialbuildermaxretry) + * [azure.identity.ManagedIdentityCredentialBuilder.resourceId](#azureidentitymanagedidentitycredentialbuilderresourceid) + * [azure.identity.SharedTokenCacheCredential](#azureidentitysharedtokencachecredential) + * [azure.identity.SharedTokenCacheCredential.SharedTokenCacheCredential](#azureidentitysharedtokencachecredentialsharedtokencachecredential) + * [azure.identity.SharedTokenCacheCredential.restFlow](#azureidentitysharedtokencachecredentialrestflow) + * [azure.identity.SharedTokenCacheCredential.restGetSas](#azureidentitysharedtokencachecredentialrestgetsas) + * [azure.identity.SharedTokenCacheCredentialBuilder](#azureidentitysharedtokencachecredentialbuilder) + * [azure.identity.SharedTokenCacheCredentialBuilder.SharedTokenCacheCredentialBuilder](#azureidentitysharedtokencachecredentialbuildersharedtokencachecredentialbuilder) + * [azure.identity.SharedTokenCacheCredentialBuilder.authorityHost](#azureidentitysharedtokencachecredentialbuilderauthorityhost) + * [azure.identity.SharedTokenCacheCredentialBuilder.build](#azureidentitysharedtokencachecredentialbuilderbuild) + * [azure.identity.SharedTokenCacheCredentialBuilder.clientId](#azureidentitysharedtokencachecredentialbuilderclientid) + * [azure.identity.SharedTokenCacheCredentialBuilder.tenantId](#azureidentitysharedtokencachecredentialbuildertenantid) + * [azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions](#azureidentitysharedtokencachecredentialbuildertokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions](#azureidentitytokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions.TokenCachePersistenceOptions](#azureidentitytokencachepersistenceoptionstokencachepersistenceoptions) + * [azure.identity.TokenCachePersistenceOptions.getName](#azureidentitytokencachepersistenceoptionsgetname) + * [azure.identity.TokenCachePersistenceOptions.setName](#azureidentitytokencachepersistenceoptionssetname) + * [azure.mathworks](#azuremathworks) + * [azure.mathworks.internal](#azuremathworksinternal) + * [azure.mathworks.internal.compareAuthEnvVars](#azuremathworksinternalcompareauthenvvars) + * [azure.mathworks.internal.datetime2OffsetDateTime](#azuremathworksinternaldatetime2offsetdatetime) + * [azure.mathworks.internal.int64FnHandler](#azuremathworksinternalint64fnhandler) + * [azure.security](#azuresecurity) + * [azure.security.keyvault](#azuresecuritykeyvault) + * [azure.security.keyvault.keys](#azuresecuritykeyvaultkeys) + * [azure.security.keyvault.keys.models](#azuresecuritykeyvaultkeysmodels) + * [azure.security.keyvault.keys.models.DeletedKey](#azuresecuritykeyvaultkeysmodelsdeletedkey) + * [azure.security.keyvault.keys.models.DeletedKey.DeletedKey](#azuresecuritykeyvaultkeysmodelsdeletedkeydeletedkey) + * [azure.security.keyvault.keys.models.DeletedKey.getDeletedOn](#azuresecuritykeyvaultkeysmodelsdeletedkeygetdeletedon) + * [azure.security.keyvault.keys.models.DeletedKey.getRecoveryId](#azuresecuritykeyvaultkeysmodelsdeletedkeygetrecoveryid) + * [azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate](#azuresecuritykeyvaultkeysmodelsdeletedkeygetscheduledpurgedate) + * [azure.security.keyvault.keys.models.JsonWebKey](#azuresecuritykeyvaultkeysmodelsjsonwebkey) + * [azure.security.keyvault.keys.models.JsonWebKey.JsonWebKey](#azuresecuritykeyvaultkeysmodelsjsonwebkeyjsonwebkey) + * [azure.security.keyvault.keys.models.JsonWebKey.clearMemory](#azuresecuritykeyvaultkeysmodelsjsonwebkeyclearmemory) + * [azure.security.keyvault.keys.models.JsonWebKey.getId](#azuresecuritykeyvaultkeysmodelsjsonwebkeygetid) + * [azure.security.keyvault.keys.models.JsonWebKey.getKeyType](#azuresecuritykeyvaultkeysmodelsjsonwebkeygetkeytype) + * [azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey](#azuresecuritykeyvaultkeysmodelsjsonwebkeyhasprivatekey) + * [azure.security.keyvault.keys.models.JsonWebKey.isValid](#azuresecuritykeyvaultkeysmodelsjsonwebkeyisvalid) + * [azure.security.keyvault.keys.models.JsonWebKey.toAes](#azuresecuritykeyvaultkeysmodelsjsonwebkeytoaes) + * [azure.security.keyvault.keys.models.JsonWebKey.toEc](#azuresecuritykeyvaultkeysmodelsjsonwebkeytoec) + * [azure.security.keyvault.keys.models.JsonWebKey.toRsa](#azuresecuritykeyvaultkeysmodelsjsonwebkeytorsa) + * [azure.security.keyvault.keys.models.JsonWebKey.toString](#azuresecuritykeyvaultkeysmodelsjsonwebkeytostring) + * [azure.security.keyvault.keys.models.KeyProperties](#azuresecuritykeyvaultkeysmodelskeyproperties) + * [azure.security.keyvault.keys.models.KeyProperties.KeyProperties](#azuresecuritykeyvaultkeysmodelskeypropertieskeyproperties) + * [azure.security.keyvault.keys.models.KeyProperties.getId](#azuresecuritykeyvaultkeysmodelskeypropertiesgetid) + * [azure.security.keyvault.keys.models.KeyProperties.getKeyId](#azuresecuritykeyvaultkeysmodelskeypropertiesgetkeyid) + * [azure.security.keyvault.keys.models.KeyProperties.getName](#azuresecuritykeyvaultkeysmodelskeypropertiesgetname) + * [azure.security.keyvault.keys.models.KeyProperties.getVersion](#azuresecuritykeyvaultkeysmodelskeypropertiesgetversion) + * [azure.security.keyvault.keys.models.KeyType](#azuresecuritykeyvaultkeysmodelskeytype) + * [azure.security.keyvault.keys.models.KeyType.KeyType](#azuresecuritykeyvaultkeysmodelskeytypekeytype) + * [azure.security.keyvault.keys.models.KeyType.fromString](#azuresecuritykeyvaultkeysmodelskeytypefromstring) + * [azure.security.keyvault.keys.models.KeyType.toJava](#azuresecuritykeyvaultkeysmodelskeytypetojava) + * [azure.security.keyvault.keys.models.KeyType.toString](#azuresecuritykeyvaultkeysmodelskeytypetostring) + * [azure.security.keyvault.keys.models.KeyVaultKey](#azuresecuritykeyvaultkeysmodelskeyvaultkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.KeyVaultKey](#azuresecuritykeyvaultkeysmodelskeyvaultkeykeyvaultkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.getId](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetid) + * [azure.security.keyvault.keys.models.KeyVaultKey.getKey](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetkey) + * [azure.security.keyvault.keys.models.KeyVaultKey.getKeyType](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetkeytype) + * [azure.security.keyvault.keys.models.KeyVaultKey.getName](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetname) + * [azure.security.keyvault.keys.models.KeyVaultKey.getProperties](#azuresecuritykeyvaultkeysmodelskeyvaultkeygetproperties) + * [azure.security.keyvault.keys.KeyClient](#azuresecuritykeyvaultkeyskeyclient) + * [azure.security.keyvault.keys.KeyClient.KeyClient](#azuresecuritykeyvaultkeyskeyclientkeyclient) + * [azure.security.keyvault.keys.KeyClient.beginDeleteKey](#azuresecuritykeyvaultkeyskeyclientbegindeletekey) + * [azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey](#azuresecuritykeyvaultkeyskeyclientbeginrecoverdeletedkey) + * [azure.security.keyvault.keys.KeyClient.createKey](#azuresecuritykeyvaultkeyskeyclientcreatekey) + * [azure.security.keyvault.keys.KeyClient.getDeletedKey](#azuresecuritykeyvaultkeyskeyclientgetdeletedkey) + * [azure.security.keyvault.keys.KeyClient.getKey](#azuresecuritykeyvaultkeyskeyclientgetkey) + * [azure.security.keyvault.keys.KeyClient.getVaultUrl](#azuresecuritykeyvaultkeyskeyclientgetvaulturl) + * [azure.security.keyvault.keys.KeyClient.listDeletedKeys](#azuresecuritykeyvaultkeyskeyclientlistdeletedkeys) + * [azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys](#azuresecuritykeyvaultkeyskeyclientlistpropertiesofkeys) + * [azure.security.keyvault.keys.KeyClient.purgeDeletedKey](#azuresecuritykeyvaultkeyskeyclientpurgedeletedkey) + * [azure.security.keyvault.keys.KeyClientBuilder](#azuresecuritykeyvaultkeyskeyclientbuilder) + * [azure.security.keyvault.keys.KeyClientBuilder.KeyClientBuilder](#azuresecuritykeyvaultkeyskeyclientbuilderkeyclientbuilder) + * [azure.security.keyvault.keys.KeyClientBuilder.buildClient](#azuresecuritykeyvaultkeyskeyclientbuilderbuildclient) + * [azure.security.keyvault.keys.KeyClientBuilder.credential](#azuresecuritykeyvaultkeyskeyclientbuildercredential) + * [azure.security.keyvault.keys.KeyClientBuilder.httpClient](#azuresecuritykeyvaultkeyskeyclientbuilderhttpclient) + * [azure.security.keyvault.keys.KeyClientBuilder.vaultUrl](#azuresecuritykeyvaultkeyskeyclientbuildervaulturl) + * [azure.security.keyvault.secrets](#azuresecuritykeyvaultsecrets) + * [azure.security.keyvault.secrets.models](#azuresecuritykeyvaultsecretsmodels) + * [azure.security.keyvault.secrets.models.DeletedSecret](#azuresecuritykeyvaultsecretsmodelsdeletedsecret) + * [azure.security.keyvault.secrets.models.DeletedSecret.DeletedSecret](#azuresecuritykeyvaultsecretsmodelsdeletedsecretdeletedsecret) + * [azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetdeletedon) + * [azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetrecoveryid) + * [azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate](#azuresecuritykeyvaultsecretsmodelsdeletedsecretgetscheduledpurgedate) + * [azure.security.keyvault.secrets.models.KeyVaultSecret](#azuresecuritykeyvaultsecretsmodelskeyvaultsecret) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.KeyVaultSecret](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretkeyvaultsecret) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getId](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetid) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getName](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetname) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetproperties) + * [azure.security.keyvault.secrets.models.KeyVaultSecret.getValue](#azuresecuritykeyvaultsecretsmodelskeyvaultsecretgetvalue) + * [azure.security.keyvault.secrets.models.SecretProperties](#azuresecuritykeyvaultsecretsmodelssecretproperties) + * [azure.security.keyvault.secrets.models.SecretProperties.SecretProperties](#azuresecuritykeyvaultsecretsmodelssecretpropertiessecretproperties) + * [azure.security.keyvault.secrets.models.SecretProperties.getId](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetid) + * [azure.security.keyvault.secrets.models.SecretProperties.getKeyId](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetkeyid) + * [azure.security.keyvault.secrets.models.SecretProperties.getName](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetname) + * [azure.security.keyvault.secrets.models.SecretProperties.getVersion](#azuresecuritykeyvaultsecretsmodelssecretpropertiesgetversion) + * [azure.security.keyvault.secrets.SecretClient](#azuresecuritykeyvaultsecretssecretclient) + * [azure.security.keyvault.secrets.SecretClient.SecretClient](#azuresecuritykeyvaultsecretssecretclientsecretclient) + * [azure.security.keyvault.secrets.SecretClient.beginDeleteSecret](#azuresecuritykeyvaultsecretssecretclientbegindeletesecret) + * [azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret](#azuresecuritykeyvaultsecretssecretclientbeginrecoverdeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.getDeletedSecret](#azuresecuritykeyvaultsecretssecretclientgetdeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.getSecret](#azuresecuritykeyvaultsecretssecretclientgetsecret) + * [azure.security.keyvault.secrets.SecretClient.getVaultUrl](#azuresecuritykeyvaultsecretssecretclientgetvaulturl) + * [azure.security.keyvault.secrets.SecretClient.listDeletedSecrets](#azuresecuritykeyvaultsecretssecretclientlistdeletedsecrets) + * [azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets](#azuresecuritykeyvaultsecretssecretclientlistpropertiesofsecrets) + * [azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret](#azuresecuritykeyvaultsecretssecretclientpurgedeletedsecret) + * [azure.security.keyvault.secrets.SecretClient.setSecret](#azuresecuritykeyvaultsecretssecretclientsetsecret) + * [azure.security.keyvault.secrets.SecretClientBuilder](#azuresecuritykeyvaultsecretssecretclientbuilder) + * [azure.security.keyvault.secrets.SecretClientBuilder.SecretClientBuilder](#azuresecuritykeyvaultsecretssecretclientbuildersecretclientbuilder) + * [azure.security.keyvault.secrets.SecretClientBuilder.buildClient](#azuresecuritykeyvaultsecretssecretclientbuilderbuildclient) + * [azure.security.keyvault.secrets.SecretClientBuilder.credential](#azuresecuritykeyvaultsecretssecretclientbuildercredential) + * [azure.security.keyvault.secrets.SecretClientBuilder.httpClient](#azuresecuritykeyvaultsecretssecretclientbuilderhttpclient) + * [azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl](#azuresecuritykeyvaultsecretssecretclientbuildervaulturl) + * [azure.storage](#azurestorage) + * [azure.storage.blob](#azurestorageblob) + * [azure.storage.blob.models](#azurestorageblobmodels) + * [azure.storage.blob.models.BlobContainerItem](#azurestorageblobmodelsblobcontaineritem) + * [azure.storage.blob.models.BlobContainerItem.BlobContainerItem](#azurestorageblobmodelsblobcontaineritemblobcontaineritem) + * [azure.storage.blob.models.BlobContainerItem.getName](#azurestorageblobmodelsblobcontaineritemgetname) + * [azure.storage.blob.models.BlobItem](#azurestorageblobmodelsblobitem) + * [azure.storage.blob.models.BlobItem.BlobItem](#azurestorageblobmodelsblobitemblobitem) + * [azure.storage.blob.models.BlobItem.getMetadata](#azurestorageblobmodelsblobitemgetmetadata) + * [azure.storage.blob.models.BlobItem.getName](#azurestorageblobmodelsblobitemgetname) + * [azure.storage.blob.models.BlobItem.getProperties](#azurestorageblobmodelsblobitemgetproperties) + * [azure.storage.blob.models.BlobItem.getSnapshot](#azurestorageblobmodelsblobitemgetsnapshot) + * [azure.storage.blob.models.BlobItem.getTags](#azurestorageblobmodelsblobitemgettags) + * [azure.storage.blob.models.BlobItem.getVersionId](#azurestorageblobmodelsblobitemgetversionid) + * [azure.storage.blob.models.BlobItem.isDeleted](#azurestorageblobmodelsblobitemisdeleted) + * [azure.storage.blob.models.BlobItem.isPrefix](#azurestorageblobmodelsblobitemisprefix) + * [azure.storage.blob.models.BlobItemProperties](#azurestorageblobmodelsblobitemproperties) + * [azure.storage.blob.models.BlobItemProperties.BlobItemProperties](#azurestorageblobmodelsblobitempropertiesblobitemproperties) + * [azure.storage.blob.models.BlobItemProperties.getCacheControl](#azurestorageblobmodelsblobitempropertiesgetcachecontrol) + * [azure.storage.blob.models.BlobItemProperties.getContentEncoding](#azurestorageblobmodelsblobitempropertiesgetcontentencoding) + * [azure.storage.blob.models.BlobItemProperties.getContentLanguage](#azurestorageblobmodelsblobitempropertiesgetcontentlanguage) + * [azure.storage.blob.models.BlobItemProperties.getContentLength](#azurestorageblobmodelsblobitempropertiesgetcontentlength) + * [azure.storage.blob.models.BlobItemProperties.getContentMd5](#azurestorageblobmodelsblobitempropertiesgetcontentmd5) + * [azure.storage.blob.models.BlobItemProperties.getContentType](#azurestorageblobmodelsblobitempropertiesgetcontenttype) + * [azure.storage.blob.models.BlobListDetails](#azurestorageblobmodelsbloblistdetails) + * [azure.storage.blob.models.BlobListDetails.BlobListDetails](#azurestorageblobmodelsbloblistdetailsbloblistdetails) + * [azure.storage.blob.models.BlobListDetails.getRetrieveCopy](#azurestorageblobmodelsbloblistdetailsgetretrievecopy) + * [azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs](#azurestorageblobmodelsbloblistdetailsgetretrievedeletedblobs) + * [azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions](#azurestorageblobmodelsbloblistdetailsgetretrievedeletedblobswithversions) + * [azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy](#azurestorageblobmodelsbloblistdetailsgetretrieveimmutabilitypolicy) + * [azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold](#azurestorageblobmodelsbloblistdetailsgetretrievelegalhold) + * [azure.storage.blob.models.BlobListDetails.getRetrieveMetadata](#azurestorageblobmodelsbloblistdetailsgetretrievemetadata) + * [azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots](#azurestorageblobmodelsbloblistdetailsgetretrievesnapshots) + * [azure.storage.blob.models.BlobListDetails.getRetrieveTags](#azurestorageblobmodelsbloblistdetailsgetretrievetags) + * [azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs](#azurestorageblobmodelsbloblistdetailsgetretrieveuncommittedblobs) + * [azure.storage.blob.models.BlobListDetails.getRetrieveVersions](#azurestorageblobmodelsbloblistdetailsgetretrieveversions) + * [azure.storage.blob.models.BlobListDetails.setRetrieveCopy](#azurestorageblobmodelsbloblistdetailssetretrievecopy) + * [azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs](#azurestorageblobmodelsbloblistdetailssetretrievedeletedblobs) + * [azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions](#azurestorageblobmodelsbloblistdetailssetretrievedeletedblobswithversions) + * [azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy](#azurestorageblobmodelsbloblistdetailssetretrieveimmutabilitypolicy) + * [azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold](#azurestorageblobmodelsbloblistdetailssetretrievelegalhold) + * [azure.storage.blob.models.BlobListDetails.setRetrieveMetadata](#azurestorageblobmodelsbloblistdetailssetretrievemetadata) + * [azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots](#azurestorageblobmodelsbloblistdetailssetretrievesnapshots) + * [azure.storage.blob.models.BlobListDetails.setRetrieveTags](#azurestorageblobmodelsbloblistdetailssetretrievetags) + * [azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs](#azurestorageblobmodelsbloblistdetailssetretrieveuncommittedblobs) + * [azure.storage.blob.models.BlobListDetails.setRetrieveVersions](#azurestorageblobmodelsbloblistdetailssetretrieveversions) + * [azure.storage.blob.models.BlobProperties](#azurestorageblobmodelsblobproperties) + * [azure.storage.blob.models.BlobProperties.BlobProperties](#azurestorageblobmodelsblobpropertiesblobproperties) + * [azure.storage.blob.models.BlobProperties.getBlobSize](#azurestorageblobmodelsblobpropertiesgetblobsize) + * [azure.storage.blob.models.BlobProperties.getCacheControl](#azurestorageblobmodelsblobpropertiesgetcachecontrol) + * [azure.storage.blob.models.BlobProperties.getContentEncoding](#azurestorageblobmodelsblobpropertiesgetcontentencoding) + * [azure.storage.blob.models.BlobProperties.getContentLanguage](#azurestorageblobmodelsblobpropertiesgetcontentlanguage) + * [azure.storage.blob.models.BlobProperties.getContentMd5](#azurestorageblobmodelsblobpropertiesgetcontentmd5) + * [azure.storage.blob.models.BlobProperties.getContentType](#azurestorageblobmodelsblobpropertiesgetcontenttype) + * [azure.storage.blob.models.ListBlobsOptions](#azurestorageblobmodelslistblobsoptions) + * [azure.storage.blob.models.ListBlobsOptions.ListBlobsOptions](#azurestorageblobmodelslistblobsoptionslistblobsoptions) + * [azure.storage.blob.models.ListBlobsOptions.getDetails](#azurestorageblobmodelslistblobsoptionsgetdetails) + * [azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage](#azurestorageblobmodelslistblobsoptionsgetmaxresultsperpage) + * [azure.storage.blob.models.ListBlobsOptions.getPrefix](#azurestorageblobmodelslistblobsoptionsgetprefix) + * [azure.storage.blob.models.ListBlobsOptions.setDetails](#azurestorageblobmodelslistblobsoptionssetdetails) + * [azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage](#azurestorageblobmodelslistblobsoptionssetmaxresultsperpage) + * [azure.storage.blob.models.ListBlobsOptions.setPrefix](#azurestorageblobmodelslistblobsoptionssetprefix) + * [azure.storage.blob.models.StorageAccountInfo](#azurestorageblobmodelsstorageaccountinfo) + * [azure.storage.blob.models.StorageAccountInfo.StorageAccountInfo](#azurestorageblobmodelsstorageaccountinfostorageaccountinfo) + * [azure.storage.blob.models.StorageAccountInfo.getAccountKind](#azurestorageblobmodelsstorageaccountinfogetaccountkind) + * [azure.storage.blob.models.UserDelegationKey](#azurestorageblobmodelsuserdelegationkey) + * [azure.storage.blob.models.UserDelegationKey.UserDelegationKey](#azurestorageblobmodelsuserdelegationkeyuserdelegationkey) + * [azure.storage.blob.models.UserDelegationKey.getSignedExpiry](#azurestorageblobmodelsuserdelegationkeygetsignedexpiry) + * [azure.storage.blob.models.UserDelegationKey.getSignedStart](#azurestorageblobmodelsuserdelegationkeygetsignedstart) + * [azure.storage.blob.sas](#azurestorageblobsas) + * [azure.storage.blob.sas.BlobContainerSasPermission](#azurestorageblobsasblobcontainersaspermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.BlobContainerSasPermission](#azurestorageblobsasblobcontainersaspermissionblobcontainersaspermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission](#azurestorageblobsasblobcontainersaspermissionhasaddpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission](#azurestorageblobsasblobcontainersaspermissionhascreatepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission](#azurestorageblobsasblobcontainersaspermissionhasdeletepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission](#azurestorageblobsasblobcontainersaspermissionhaslistpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission](#azurestorageblobsasblobcontainersaspermissionhasreadpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission](#azurestorageblobsasblobcontainersaspermissionhaswritepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.parse](#azurestorageblobsasblobcontainersaspermissionparse) + * [azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission](#azurestorageblobsasblobcontainersaspermissionsetaddpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission](#azurestorageblobsasblobcontainersaspermissionsetcreatepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission](#azurestorageblobsasblobcontainersaspermissionsetdeletepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setListPermission](#azurestorageblobsasblobcontainersaspermissionsetlistpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission](#azurestorageblobsasblobcontainersaspermissionsetreadpermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission](#azurestorageblobsasblobcontainersaspermissionsetwritepermission) + * [azure.storage.blob.sas.BlobContainerSasPermission.toString](#azurestorageblobsasblobcontainersaspermissiontostring) + * [azure.storage.blob.sas.BlobSasPermission](#azurestorageblobsasblobsaspermission) + * [azure.storage.blob.sas.BlobSasPermission.BlobSasPermission](#azurestorageblobsasblobsaspermissionblobsaspermission) + * [azure.storage.blob.sas.BlobSasPermission.hasAddPermission](#azurestorageblobsasblobsaspermissionhasaddpermission) + * [azure.storage.blob.sas.BlobSasPermission.hasCreatePermission](#azurestorageblobsasblobsaspermissionhascreatepermission) + * [azure.storage.blob.sas.BlobSasPermission.hasDeletePermission](#azurestorageblobsasblobsaspermissionhasdeletepermission) + * [azure.storage.blob.sas.BlobSasPermission.hasReadPermission](#azurestorageblobsasblobsaspermissionhasreadpermission) + * [azure.storage.blob.sas.BlobSasPermission.hasWritePermission](#azurestorageblobsasblobsaspermissionhaswritepermission) + * [azure.storage.blob.sas.BlobSasPermission.parse](#azurestorageblobsasblobsaspermissionparse) + * [azure.storage.blob.sas.BlobSasPermission.setAddPermission](#azurestorageblobsasblobsaspermissionsetaddpermission) + * [azure.storage.blob.sas.BlobSasPermission.setCreatePermission](#azurestorageblobsasblobsaspermissionsetcreatepermission) + * [azure.storage.blob.sas.BlobSasPermission.setDeletePermission](#azurestorageblobsasblobsaspermissionsetdeletepermission) + * [azure.storage.blob.sas.BlobSasPermission.setReadPermission](#azurestorageblobsasblobsaspermissionsetreadpermission) + * [azure.storage.blob.sas.BlobSasPermission.setWritePermission](#azurestorageblobsasblobsaspermissionsetwritepermission) + * [azure.storage.blob.sas.BlobSasPermission.toString](#azurestorageblobsasblobsaspermissiontostring) + * [azure.storage.blob.sas.BlobServiceSasSignatureValues](#azurestorageblobsasblobservicesassignaturevalues) + * [azure.storage.blob.sas.BlobServiceSasSignatureValues.BlobServiceSasSignatureValues](#azurestorageblobsasblobservicesassignaturevaluesblobservicesassignaturevalues) + * [azure.storage.blob.specialized](#azurestorageblobspecialized) + * [azure.storage.blob.specialized.BlobLeaseClient](#azurestorageblobspecializedblobleaseclient) + * [azure.storage.blob.specialized.BlobLeaseClient.BlobLeaseClient](#azurestorageblobspecializedblobleaseclientblobleaseclient) + * [azure.storage.blob.specialized.BlobLeaseClient.acquireLease](#azurestorageblobspecializedblobleaseclientacquirelease) + * [azure.storage.blob.specialized.BlobLeaseClient.breakLease](#azurestorageblobspecializedblobleaseclientbreaklease) + * [azure.storage.blob.specialized.BlobLeaseClient.changeLease](#azurestorageblobspecializedblobleaseclientchangelease) + * [azure.storage.blob.specialized.BlobLeaseClient.getLeaseId](#azurestorageblobspecializedblobleaseclientgetleaseid) + * [azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl](#azurestorageblobspecializedblobleaseclientgetresourceurl) + * [azure.storage.blob.specialized.BlobLeaseClient.releaseLease](#azurestorageblobspecializedblobleaseclientreleaselease) + * [azure.storage.blob.specialized.BlobLeaseClient.renewLease](#azurestorageblobspecializedblobleaseclientrenewlease) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder](#azurestorageblobspecializedblobleaseclientbuilder) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.BlobLeaseClientBuilder](#azurestorageblobspecializedblobleaseclientbuilderblobleaseclientbuilder) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient](#azurestorageblobspecializedblobleaseclientbuilderblobclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient](#azurestorageblobspecializedblobleaseclientbuilderbuildclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient](#azurestorageblobspecializedblobleaseclientbuildercontainerclient) + * [azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId](#azurestorageblobspecializedblobleaseclientbuilderleaseid) + * [azure.storage.blob.BlobClient](#azurestorageblobblobclient) + * [azure.storage.blob.BlobClient.BlobClient](#azurestorageblobblobclientblobclient) + * [azure.storage.blob.BlobClient.copyFromUrl](#azurestorageblobblobclientcopyfromurl) + * [azure.storage.blob.BlobClient.delete](#azurestorageblobblobclientdelete) + * [azure.storage.blob.BlobClient.deleteBlob](#azurestorageblobblobclientdeleteblob) + * [azure.storage.blob.BlobClient.downloadToFile](#azurestorageblobblobclientdownloadtofile) + * [azure.storage.blob.BlobClient.exists](#azurestorageblobblobclientexists) + * [azure.storage.blob.BlobClient.generateSas](#azurestorageblobblobclientgeneratesas) + * [azure.storage.blob.BlobClient.generateUserDelegationSas](#azurestorageblobblobclientgenerateuserdelegationsas) + * [azure.storage.blob.BlobClient.getAccountName](#azurestorageblobblobclientgetaccountname) + * [azure.storage.blob.BlobClient.getBlobUrl](#azurestorageblobblobclientgetbloburl) + * [azure.storage.blob.BlobClient.getContainerClient](#azurestorageblobblobclientgetcontainerclient) + * [azure.storage.blob.BlobClient.getProperties](#azurestorageblobblobclientgetproperties) + * [azure.storage.blob.BlobClient.uploadFromFile](#azurestorageblobblobclientuploadfromfile) + * [azure.storage.blob.BlobClientBuilder](#azurestorageblobblobclientbuilder) + * [azure.storage.blob.BlobClientBuilder.BlobClientBuilder](#azurestorageblobblobclientbuilderblobclientbuilder) + * [azure.storage.blob.BlobClientBuilder.blobName](#azurestorageblobblobclientbuilderblobname) + * [azure.storage.blob.BlobClientBuilder.buildClient](#azurestorageblobblobclientbuilderbuildclient) + * [azure.storage.blob.BlobClientBuilder.connectionString](#azurestorageblobblobclientbuilderconnectionstring) + * [azure.storage.blob.BlobClientBuilder.containerName](#azurestorageblobblobclientbuildercontainername) + * [azure.storage.blob.BlobClientBuilder.credential](#azurestorageblobblobclientbuildercredential) + * [azure.storage.blob.BlobClientBuilder.endpoint](#azurestorageblobblobclientbuilderendpoint) + * [azure.storage.blob.BlobClientBuilder.httpClient](#azurestorageblobblobclientbuilderhttpclient) + * [azure.storage.blob.BlobClientBuilder.sasToken](#azurestorageblobblobclientbuildersastoken) + * [azure.storage.blob.BlobClientBuilder.setAnonymousAccess](#azurestorageblobblobclientbuildersetanonymousaccess) + * [azure.storage.blob.BlobContainerClient](#azurestorageblobblobcontainerclient) + * [azure.storage.blob.BlobContainerClient.BlobContainerClient](#azurestorageblobblobcontainerclientblobcontainerclient) + * [azure.storage.blob.BlobContainerClient.create](#azurestorageblobblobcontainerclientcreate) + * [azure.storage.blob.BlobContainerClient.delete](#azurestorageblobblobcontainerclientdelete) + * [azure.storage.blob.BlobContainerClient.deleteContainer](#azurestorageblobblobcontainerclientdeletecontainer) + * [azure.storage.blob.BlobContainerClient.exists](#azurestorageblobblobcontainerclientexists) + * [azure.storage.blob.BlobContainerClient.generateUserDelegationSas](#azurestorageblobblobcontainerclientgenerateuserdelegationsas) + * [azure.storage.blob.BlobContainerClient.getAccountName](#azurestorageblobblobcontainerclientgetaccountname) + * [azure.storage.blob.BlobContainerClient.getAccountUrl](#azurestorageblobblobcontainerclientgetaccounturl) + * [azure.storage.blob.BlobContainerClient.getBlobClient](#azurestorageblobblobcontainerclientgetblobclient) + * [azure.storage.blob.BlobContainerClient.getBlobContainerName](#azurestorageblobblobcontainerclientgetblobcontainername) + * [azure.storage.blob.BlobContainerClient.getBlobContainerUrl](#azurestorageblobblobcontainerclientgetblobcontainerurl) + * [azure.storage.blob.BlobContainerClient.getServiceClient](#azurestorageblobblobcontainerclientgetserviceclient) + * [azure.storage.blob.BlobContainerClient.listBlobs](#azurestorageblobblobcontainerclientlistblobs) + * [azure.storage.blob.BlobContainerClient.listBlobsByHierarchy](#azurestorageblobblobcontainerclientlistblobsbyhierarchy) + * [azure.storage.blob.BlobContainerClientBuilder](#azurestorageblobblobcontainerclientbuilder) + * [azure.storage.blob.BlobContainerClientBuilder.BlobContainerClientBuilder](#azurestorageblobblobcontainerclientbuilderblobcontainerclientbuilder) + * [azure.storage.blob.BlobContainerClientBuilder.buildClient](#azurestorageblobblobcontainerclientbuilderbuildclient) + * [azure.storage.blob.BlobContainerClientBuilder.connectionString](#azurestorageblobblobcontainerclientbuilderconnectionstring) + * [azure.storage.blob.BlobContainerClientBuilder.containerName](#azurestorageblobblobcontainerclientbuildercontainername) + * [azure.storage.blob.BlobContainerClientBuilder.credential](#azurestorageblobblobcontainerclientbuildercredential) + * [azure.storage.blob.BlobContainerClientBuilder.endpoint](#azurestorageblobblobcontainerclientbuilderendpoint) + * [azure.storage.blob.BlobContainerClientBuilder.httpClient](#azurestorageblobblobcontainerclientbuilderhttpclient) + * [azure.storage.blob.BlobContainerClientBuilder.sasToken](#azurestorageblobblobcontainerclientbuildersastoken) + * [azure.storage.blob.BlobServiceClient](#azurestorageblobblobserviceclient) + * [azure.storage.blob.BlobServiceClient.BlobServiceClient](#azurestorageblobblobserviceclientblobserviceclient) + * [azure.storage.blob.BlobServiceClient.createBlobContainer](#azurestorageblobblobserviceclientcreateblobcontainer) + * [azure.storage.blob.BlobServiceClient.deleteBlobContainer](#azurestorageblobblobserviceclientdeleteblobcontainer) + * [azure.storage.blob.BlobServiceClient.generateAccountSas](#azurestorageblobblobserviceclientgenerateaccountsas) + * [azure.storage.blob.BlobServiceClient.getAccountInfo](#azurestorageblobblobserviceclientgetaccountinfo) + * [azure.storage.blob.BlobServiceClient.getAccountName](#azurestorageblobblobserviceclientgetaccountname) + * [azure.storage.blob.BlobServiceClient.getAccountUrl](#azurestorageblobblobserviceclientgetaccounturl) + * [azure.storage.blob.BlobServiceClient.getUserDelegationKey](#azurestorageblobblobserviceclientgetuserdelegationkey) + * [azure.storage.blob.BlobServiceClient.listBlobContainers](#azurestorageblobblobserviceclientlistblobcontainers) + * [azure.storage.blob.BlobServiceClient.setAnonymousAccess](#azurestorageblobblobserviceclientsetanonymousaccess) + * [azure.storage.blob.BlobServiceClientBuilder](#azurestorageblobblobserviceclientbuilder) + * [azure.storage.blob.BlobServiceClientBuilder.BlobServiceClientBuilder](#azurestorageblobblobserviceclientbuilderblobserviceclientbuilder) + * [azure.storage.blob.BlobServiceClientBuilder.buildClient](#azurestorageblobblobserviceclientbuilderbuildclient) + * [azure.storage.blob.BlobServiceClientBuilder.connectionString](#azurestorageblobblobserviceclientbuilderconnectionstring) + * [azure.storage.blob.BlobServiceClientBuilder.credential](#azurestorageblobblobserviceclientbuildercredential) + * [azure.storage.blob.BlobServiceClientBuilder.endpoint](#azurestorageblobblobserviceclientbuilderendpoint) + * [azure.storage.blob.BlobServiceClientBuilder.httpClient](#azurestorageblobblobserviceclientbuilderhttpclient) + * [azure.storage.blob.BlobServiceClientBuilder.retryOptions](#azurestorageblobblobserviceclientbuilderretryoptions) + * [azure.storage.blob.BlobServiceClientBuilder.sasToken](#azurestorageblobblobserviceclientbuildersastoken) + * [azure.storage.common](#azurestoragecommon) + * [azure.storage.common.policy](#azurestoragecommonpolicy) + * [azure.storage.common.policy.RequestRetryOptions](#azurestoragecommonpolicyrequestretryoptions) + * [azure.storage.common.policy.RequestRetryOptions.RequestRetryOptions](#azurestoragecommonpolicyrequestretryoptionsrequestretryoptions) + * [azure.storage.common.policy.RetryPolicyType](#azurestoragecommonpolicyretrypolicytype) + * [azure.storage.common.policy.RetryPolicyType.RetryPolicyType](#azurestoragecommonpolicyretrypolicytyperetrypolicytype) + * [azure.storage.common.policy.RetryPolicyType.toJava](#azurestoragecommonpolicyretrypolicytypetojava) + * [azure.storage.common.policy.RetryPolicyType.toString](#azurestoragecommonpolicyretrypolicytypetostring) + * [azure.storage.common.policy.RetryPolicyType.valueOf](#azurestoragecommonpolicyretrypolicytypevalueof) + * [azure.storage.common.sas](#azurestoragecommonsas) + * [azure.storage.common.sas.AccountSasPermission](#azurestoragecommonsasaccountsaspermission) + * [azure.storage.common.sas.AccountSasPermission.AccountSasPermission](#azurestoragecommonsasaccountsaspermissionaccountsaspermission) + * [azure.storage.common.sas.AccountSasPermission.hasAddPermission](#azurestoragecommonsasaccountsaspermissionhasaddpermission) + * [azure.storage.common.sas.AccountSasPermission.hasCreatePermission](#azurestoragecommonsasaccountsaspermissionhascreatepermission) + * [azure.storage.common.sas.AccountSasPermission.hasDeletePermission](#azurestoragecommonsasaccountsaspermissionhasdeletepermission) + * [azure.storage.common.sas.AccountSasPermission.hasListPermission](#azurestoragecommonsasaccountsaspermissionhaslistpermission) + * [azure.storage.common.sas.AccountSasPermission.hasProcessMessages](#azurestoragecommonsasaccountsaspermissionhasprocessmessages) + * [azure.storage.common.sas.AccountSasPermission.hasReadPermission](#azurestoragecommonsasaccountsaspermissionhasreadpermission) + * [azure.storage.common.sas.AccountSasPermission.hasUpdatePermission](#azurestoragecommonsasaccountsaspermissionhasupdatepermission) + * [azure.storage.common.sas.AccountSasPermission.hasWritePermission](#azurestoragecommonsasaccountsaspermissionhaswritepermission) + * [azure.storage.common.sas.AccountSasPermission.parse](#azurestoragecommonsasaccountsaspermissionparse) + * [azure.storage.common.sas.AccountSasPermission.setAddPermission](#azurestoragecommonsasaccountsaspermissionsetaddpermission) + * [azure.storage.common.sas.AccountSasPermission.setCreatePermission](#azurestoragecommonsasaccountsaspermissionsetcreatepermission) + * [azure.storage.common.sas.AccountSasPermission.setDeletePermission](#azurestoragecommonsasaccountsaspermissionsetdeletepermission) + * [azure.storage.common.sas.AccountSasPermission.setListPermission](#azurestoragecommonsasaccountsaspermissionsetlistpermission) + * [azure.storage.common.sas.AccountSasPermission.setProcessMessages](#azurestoragecommonsasaccountsaspermissionsetprocessmessages) + * [azure.storage.common.sas.AccountSasPermission.setReadPermission](#azurestoragecommonsasaccountsaspermissionsetreadpermission) + * [azure.storage.common.sas.AccountSasPermission.setUpdatePermission](#azurestoragecommonsasaccountsaspermissionsetupdatepermission) + * [azure.storage.common.sas.AccountSasPermission.setWritePermission](#azurestoragecommonsasaccountsaspermissionsetwritepermission) + * [azure.storage.common.sas.AccountSasPermission.toString](#azurestoragecommonsasaccountsaspermissiontostring) + * [azure.storage.common.sas.AccountSasResourceType](#azurestoragecommonsasaccountsasresourcetype) + * [azure.storage.common.sas.AccountSasResourceType.AccountSasResourceType](#azurestoragecommonsasaccountsasresourcetypeaccountsasresourcetype) + * [azure.storage.common.sas.AccountSasResourceType.isContainer](#azurestoragecommonsasaccountsasresourcetypeiscontainer) + * [azure.storage.common.sas.AccountSasResourceType.isObject](#azurestoragecommonsasaccountsasresourcetypeisobject) + * [azure.storage.common.sas.AccountSasResourceType.isService](#azurestoragecommonsasaccountsasresourcetypeisservice) + * [azure.storage.common.sas.AccountSasResourceType.parse](#azurestoragecommonsasaccountsasresourcetypeparse) + * [azure.storage.common.sas.AccountSasResourceType.setContainer](#azurestoragecommonsasaccountsasresourcetypesetcontainer) + * [azure.storage.common.sas.AccountSasResourceType.setObject](#azurestoragecommonsasaccountsasresourcetypesetobject) + * [azure.storage.common.sas.AccountSasResourceType.setService](#azurestoragecommonsasaccountsasresourcetypesetservice) + * [azure.storage.common.sas.AccountSasResourceType.toString](#azurestoragecommonsasaccountsasresourcetypetostring) + * [azure.storage.common.sas.AccountSasService](#azurestoragecommonsasaccountsasservice) + * [azure.storage.common.sas.AccountSasService.AccountSasService](#azurestoragecommonsasaccountsasserviceaccountsasservice) + * [azure.storage.common.sas.AccountSasService.hasBlobAccess](#azurestoragecommonsasaccountsasservicehasblobaccess) + * [azure.storage.common.sas.AccountSasService.hasFileAccess](#azurestoragecommonsasaccountsasservicehasfileaccess) + * [azure.storage.common.sas.AccountSasService.hasQueueAccess](#azurestoragecommonsasaccountsasservicehasqueueaccess) + * [azure.storage.common.sas.AccountSasService.hasTableAccess](#azurestoragecommonsasaccountsasservicehastableaccess) + * [azure.storage.common.sas.AccountSasService.parse](#azurestoragecommonsasaccountsasserviceparse) + * [azure.storage.common.sas.AccountSasService.setBlobAccess](#azurestoragecommonsasaccountsasservicesetblobaccess) + * [azure.storage.common.sas.AccountSasService.setFileAccess](#azurestoragecommonsasaccountsasservicesetfileaccess) + * [azure.storage.common.sas.AccountSasService.setQueueAccess](#azurestoragecommonsasaccountsasservicesetqueueaccess) + * [azure.storage.common.sas.AccountSasService.setTableAccess](#azurestoragecommonsasaccountsasservicesettableaccess) + * [azure.storage.common.sas.AccountSasService.toString](#azurestoragecommonsasaccountsasservicetostring) + * [azure.storage.common.sas.AccountSasSignatureValues](#azurestoragecommonsasaccountsassignaturevalues) + * [azure.storage.common.sas.AccountSasSignatureValues.AccountSasSignatureValues](#azurestoragecommonsasaccountsassignaturevaluesaccountsassignaturevalues) + * [azure.storage.common.StorageSharedKeyCredential](#azurestoragecommonstoragesharedkeycredential) + * [azure.storage.common.StorageSharedKeyCredential.StorageSharedKeyCredential](#azurestoragecommonstoragesharedkeycredentialstoragesharedkeycredential) + * [azure.storage.common.StorageSharedKeyCredential.getAccountName](#azurestoragecommonstoragesharedkeycredentialgetaccountname) + * [azure.storage.file](#azurestoragefile) + * [azure.storage.file.datalake](#azurestoragefiledatalake) + * [azure.storage.file.datalake.models](#azurestoragefiledatalakemodels) + * [azure.storage.file.datalake.models.PathItem](#azurestoragefiledatalakemodelspathitem) + * [azure.storage.file.datalake.models.PathItem.PathItem](#azurestoragefiledatalakemodelspathitempathitem) + * [azure.storage.file.datalake.models.PathItem.getName](#azurestoragefiledatalakemodelspathitemgetname) + * [azure.storage.file.datalake.models.PathItem.isDirectory](#azurestoragefiledatalakemodelspathitemisdirectory) + * [azure.storage.file.datalake.models.PathProperties](#azurestoragefiledatalakemodelspathproperties) + * [azure.storage.file.datalake.models.PathProperties.PathProperties](#azurestoragefiledatalakemodelspathpropertiespathproperties) + * [azure.storage.file.datalake.sas](#azurestoragefiledatalakesas) + * [azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues](#azurestoragefiledatalakesasdatalakeservicesassignaturevalues) + * [azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues.DataLakeServiceSasSignatureValues](#azurestoragefiledatalakesasdatalakeservicesassignaturevaluesdatalakeservicesassignaturevalues) + * [azure.storage.file.datalake.sas.FileSystemSasPermission](#azurestoragefiledatalakesasfilesystemsaspermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.FileSystemSasPermission](#azurestoragefiledatalakesasfilesystemsaspermissionfilesystemsaspermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasaddpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhascreatepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasdeletepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasexecutepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhaslistpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmanageownershippermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasmovepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission](#azurestoragefiledatalakesasfilesystemsaspermissionhasreadpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission](#azurestoragefiledatalakesasfilesystemsaspermissionhaswritepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.parse](#azurestoragefiledatalakesasfilesystemsaspermissionparse) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetaddpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetcreatepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetdeletepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetexecutepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetlistpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmanageownershippermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetmovepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetreadpermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission](#azurestoragefiledatalakesasfilesystemsaspermissionsetwritepermission) + * [azure.storage.file.datalake.sas.FileSystemSasPermission.toString](#azurestoragefiledatalakesasfilesystemsaspermissiontostring) + * [azure.storage.file.datalake.sas.PathSasPermission](#azurestoragefiledatalakesaspathsaspermission) + * [azure.storage.file.datalake.sas.PathSasPermission.PathSasPermission](#azurestoragefiledatalakesaspathsaspermissionpathsaspermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission](#azurestoragefiledatalakesaspathsaspermissionhasaddpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission](#azurestoragefiledatalakesaspathsaspermissionhascreatepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission](#azurestoragefiledatalakesaspathsaspermissionhasdeletepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission](#azurestoragefiledatalakesaspathsaspermissionhasexecutepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasListPermission](#azurestoragefiledatalakesaspathsaspermissionhaslistpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission](#azurestoragefiledatalakesaspathsaspermissionhasmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission](#azurestoragefiledatalakesaspathsaspermissionhasmanageownershippermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission](#azurestoragefiledatalakesaspathsaspermissionhasmovepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission](#azurestoragefiledatalakesaspathsaspermissionhasreadpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission](#azurestoragefiledatalakesaspathsaspermissionhaswritepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.parse](#azurestoragefiledatalakesaspathsaspermissionparse) + * [azure.storage.file.datalake.sas.PathSasPermission.setAddPermission](#azurestoragefiledatalakesaspathsaspermissionsetaddpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission](#azurestoragefiledatalakesaspathsaspermissionsetcreatepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission](#azurestoragefiledatalakesaspathsaspermissionsetdeletepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission](#azurestoragefiledatalakesaspathsaspermissionsetexecutepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setListPermission](#azurestoragefiledatalakesaspathsaspermissionsetlistpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission](#azurestoragefiledatalakesaspathsaspermissionsetmanageaccesscontrolpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission](#azurestoragefiledatalakesaspathsaspermissionsetmanageownershippermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setMovePermission](#azurestoragefiledatalakesaspathsaspermissionsetmovepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setReadPermission](#azurestoragefiledatalakesaspathsaspermissionsetreadpermission) + * [azure.storage.file.datalake.sas.PathSasPermission.setWritePermission](#azurestoragefiledatalakesaspathsaspermissionsetwritepermission) + * [azure.storage.file.datalake.sas.PathSasPermission.toString](#azurestoragefiledatalakesaspathsaspermissiontostring) + * [azure.storage.file.datalake.DataLakeDirectoryClient](#azurestoragefiledatalakedatalakedirectoryclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.DataLakeDirectoryClient](#azurestoragefiledatalakedatalakedirectoryclientdatalakedirectoryclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.createFile](#azurestoragefiledatalakedatalakedirectoryclientcreatefile) + * [azure.storage.file.datalake.DataLakeDirectoryClient.delete](#azurestoragefiledatalakedatalakedirectoryclientdelete) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory](#azurestoragefiledatalakedatalakedirectoryclientdeletedirectory) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile](#azurestoragefiledatalakedatalakedirectoryclientdeletefile) + * [azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory](#azurestoragefiledatalakedatalakedirectoryclientdeletesubdirectory) + * [azure.storage.file.datalake.DataLakeDirectoryClient.exists](#azurestoragefiledatalakedatalakedirectoryclientexists) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath](#azurestoragefiledatalakedatalakedirectoryclientgetdirectorypath) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl](#azurestoragefiledatalakedatalakedirectoryclientgetdirectoryurl) + * [azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient](#azurestoragefiledatalakedatalakedirectoryclientgetfileclient) + * [azure.storage.file.datalake.DataLakeDirectoryClient.listPaths](#azurestoragefiledatalakedatalakedirectoryclientlistpaths) + * [azure.storage.file.datalake.DataLakeDirectoryClient.rename](#azurestoragefiledatalakedatalakedirectoryclientrename) + * [azure.storage.file.datalake.DataLakeFileClient](#azurestoragefiledatalakedatalakefileclient) + * [azure.storage.file.datalake.DataLakeFileClient.DataLakeFileClient](#azurestoragefiledatalakedatalakefileclientdatalakefileclient) + * [azure.storage.file.datalake.DataLakeFileClient.delete](#azurestoragefiledatalakedatalakefileclientdelete) + * [azure.storage.file.datalake.DataLakeFileClient.deleteFile](#azurestoragefiledatalakedatalakefileclientdeletefile) + * [azure.storage.file.datalake.DataLakeFileClient.exists](#azurestoragefiledatalakedatalakefileclientexists) + * [azure.storage.file.datalake.DataLakeFileClient.getFilePath](#azurestoragefiledatalakedatalakefileclientgetfilepath) + * [azure.storage.file.datalake.DataLakeFileClient.getFileUrl](#azurestoragefiledatalakedatalakefileclientgetfileurl) + * [azure.storage.file.datalake.DataLakeFileClient.readToFile](#azurestoragefiledatalakedatalakefileclientreadtofile) + * [azure.storage.file.datalake.DataLakeFileClient.rename](#azurestoragefiledatalakedatalakefileclientrename) + * [azure.storage.file.datalake.DataLakeFileClient.uploadFromFile](#azurestoragefiledatalakedatalakefileclientuploadfromfile) + * [azure.storage.file.datalake.DataLakeFileSystemClient](#azurestoragefiledatalakedatalakefilesystemclient) + * [azure.storage.file.datalake.DataLakeFileSystemClient.DataLakeFileSystemClient](#azurestoragefiledatalakedatalakefilesystemclientdatalakefilesystemclient) + * [azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory](#azurestoragefiledatalakedatalakefilesystemclientcreatedirectory) + * [azure.storage.file.datalake.DataLakeFileSystemClient.delete](#azurestoragefiledatalakedatalakefilesystemclientdelete) + * [azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory](#azurestoragefiledatalakedatalakefilesystemclientdeletedirectory) + * [azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile](#azurestoragefiledatalakedatalakefilesystemclientdeletefile) + * [azure.storage.file.datalake.DataLakeFileSystemClient.generateSas](#azurestoragefiledatalakedatalakefilesystemclientgeneratesas) + * [azure.storage.file.datalake.DataLakeFileSystemClient.listPaths](#azurestoragefiledatalakedatalakefilesystemclientlistpaths) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder](#azurestoragefiledatalakedatalakefilesystemclientbuilder) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.DataLakeFileSystemClientBuilder](#azurestoragefiledatalakedatalakefilesystemclientbuilderdatalakefilesystemclientbuilder) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient](#azurestoragefiledatalakedatalakefilesystemclientbuilderbuildclient) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential](#azurestoragefiledatalakedatalakefilesystemclientbuildercredential) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint](#azurestoragefiledatalakedatalakefilesystemclientbuilderendpoint) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName](#azurestoragefiledatalakedatalakefilesystemclientbuilderfilesystemname) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient](#azurestoragefiledatalakedatalakefilesystemclientbuilderhttpclient) + * [azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken](#azurestoragefiledatalakedatalakefilesystemclientbuildersastoken) + * [azure.storage.file.datalake.DataLakePathClientBuilder](#azurestoragefiledatalakedatalakepathclientbuilder) + * [azure.storage.file.datalake.DataLakePathClientBuilder.DataLakePathClientBuilder](#azurestoragefiledatalakedatalakepathclientbuilderdatalakepathclientbuilder) + * [azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient](#azurestoragefiledatalakedatalakepathclientbuilderbuilddirectoryclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient](#azurestoragefiledatalakedatalakepathclientbuilderbuildfileclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.credential](#azurestoragefiledatalakedatalakepathclientbuildercredential) + * [azure.storage.file.datalake.DataLakePathClientBuilder.endpoint](#azurestoragefiledatalakedatalakepathclientbuilderendpoint) + * [azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName](#azurestoragefiledatalakedatalakepathclientbuilderfilesystemname) + * [azure.storage.file.datalake.DataLakePathClientBuilder.httpClient](#azurestoragefiledatalakedatalakepathclientbuilderhttpclient) + * [azure.storage.file.datalake.DataLakePathClientBuilder.pathName](#azurestoragefiledatalakedatalakepathclientbuilderpathname) + * [azure.storage.file.datalake.DataLakePathClientBuilder.sasToken](#azurestoragefiledatalakedatalakepathclientbuildersastoken) + * [azure.storage.queue](#azurestoragequeue) + * [azure.storage.queue.models](#azurestoragequeuemodels) + * [azure.storage.queue.models.PeekedMessageItem](#azurestoragequeuemodelspeekedmessageitem) + * [azure.storage.queue.models.PeekedMessageItem.PeekedMessageItem](#azurestoragequeuemodelspeekedmessageitempeekedmessageitem) + * [azure.storage.queue.models.PeekedMessageItem.getDequeueCount](#azurestoragequeuemodelspeekedmessageitemgetdequeuecount) + * [azure.storage.queue.models.PeekedMessageItem.getExpirationTime](#azurestoragequeuemodelspeekedmessageitemgetexpirationtime) + * [azure.storage.queue.models.PeekedMessageItem.getInsertionTime](#azurestoragequeuemodelspeekedmessageitemgetinsertiontime) + * [azure.storage.queue.models.PeekedMessageItem.getMessageId](#azurestoragequeuemodelspeekedmessageitemgetmessageid) + * [azure.storage.queue.models.PeekedMessageItem.getMessageText](#azurestoragequeuemodelspeekedmessageitemgetmessagetext) + * [azure.storage.queue.models.PeekedMessageItem.setDequeueCount](#azurestoragequeuemodelspeekedmessageitemsetdequeuecount) + * [azure.storage.queue.models.PeekedMessageItem.setExpirationTime](#azurestoragequeuemodelspeekedmessageitemsetexpirationtime) + * [azure.storage.queue.models.PeekedMessageItem.setInsertionTime](#azurestoragequeuemodelspeekedmessageitemsetinsertiontime) + * [azure.storage.queue.models.PeekedMessageItem.setMessageId](#azurestoragequeuemodelspeekedmessageitemsetmessageid) + * [azure.storage.queue.models.PeekedMessageItem.setMessageText](#azurestoragequeuemodelspeekedmessageitemsetmessagetext) + * [azure.storage.queue.models.QueueItem](#azurestoragequeuemodelsqueueitem) + * [azure.storage.queue.models.QueueItem.QueueItem](#azurestoragequeuemodelsqueueitemqueueitem) + * [azure.storage.queue.models.QueueItem.getName](#azurestoragequeuemodelsqueueitemgetname) + * [azure.storage.queue.models.QueueMessageItem](#azurestoragequeuemodelsqueuemessageitem) + * [azure.storage.queue.models.QueueMessageItem.QueueMessageItem](#azurestoragequeuemodelsqueuemessageitemqueuemessageitem) + * [azure.storage.queue.models.QueueMessageItem.getDequeueCount](#azurestoragequeuemodelsqueuemessageitemgetdequeuecount) + * [azure.storage.queue.models.QueueMessageItem.getExpirationTime](#azurestoragequeuemodelsqueuemessageitemgetexpirationtime) + * [azure.storage.queue.models.QueueMessageItem.getInsertionTime](#azurestoragequeuemodelsqueuemessageitemgetinsertiontime) + * [azure.storage.queue.models.QueueMessageItem.getMessageId](#azurestoragequeuemodelsqueuemessageitemgetmessageid) + * [azure.storage.queue.models.QueueMessageItem.getMessageText](#azurestoragequeuemodelsqueuemessageitemgetmessagetext) + * [azure.storage.queue.models.QueueMessageItem.getPopReceipt](#azurestoragequeuemodelsqueuemessageitemgetpopreceipt) + * [azure.storage.queue.models.QueueMessageItem.getTimeNextVisible](#azurestoragequeuemodelsqueuemessageitemgettimenextvisible) + * [azure.storage.queue.models.QueueMessageItem.setDequeueCount](#azurestoragequeuemodelsqueuemessageitemsetdequeuecount) + * [azure.storage.queue.models.QueueMessageItem.setExpirationTime](#azurestoragequeuemodelsqueuemessageitemsetexpirationtime) + * [azure.storage.queue.models.QueueMessageItem.setInsertionTime](#azurestoragequeuemodelsqueuemessageitemsetinsertiontime) + * [azure.storage.queue.models.QueueMessageItem.setMessageId](#azurestoragequeuemodelsqueuemessageitemsetmessageid) + * [azure.storage.queue.models.QueueMessageItem.setMessageText](#azurestoragequeuemodelsqueuemessageitemsetmessagetext) + * [azure.storage.queue.models.QueueMessageItem.setPopReceipt](#azurestoragequeuemodelsqueuemessageitemsetpopreceipt) + * [azure.storage.queue.models.QueueMessageItem.setTimeNextVisible](#azurestoragequeuemodelsqueuemessageitemsettimenextvisible) + * [azure.storage.queue.models.QueueProperties](#azurestoragequeuemodelsqueueproperties) + * [azure.storage.queue.models.QueueProperties.QueueProperties](#azurestoragequeuemodelsqueuepropertiesqueueproperties) + * [azure.storage.queue.models.QueueProperties.getApproximateMessageCount](#azurestoragequeuemodelsqueuepropertiesgetapproximatemessagecount) + * [azure.storage.queue.models.SendMessageResult](#azurestoragequeuemodelssendmessageresult) + * [azure.storage.queue.models.SendMessageResult.SendMessageResult](#azurestoragequeuemodelssendmessageresultsendmessageresult) + * [azure.storage.queue.models.SendMessageResult.getExpirationTime](#azurestoragequeuemodelssendmessageresultgetexpirationtime) + * [azure.storage.queue.models.SendMessageResult.getInsertionTime](#azurestoragequeuemodelssendmessageresultgetinsertiontime) + * [azure.storage.queue.models.SendMessageResult.getPopReceipt](#azurestoragequeuemodelssendmessageresultgetpopreceipt) + * [azure.storage.queue.models.SendMessageResult.getTimeNextVisible](#azurestoragequeuemodelssendmessageresultgettimenextvisible) + * [azure.storage.queue.sas](#azurestoragequeuesas) + * [azure.storage.queue.sas.QueueSasPermission](#azurestoragequeuesasqueuesaspermission) + * [azure.storage.queue.sas.QueueSasPermission.QueueSasPermission](#azurestoragequeuesasqueuesaspermissionqueuesaspermission) + * [azure.storage.queue.sas.QueueSasPermission.hasAddPermission](#azurestoragequeuesasqueuesaspermissionhasaddpermission) + * [azure.storage.queue.sas.QueueSasPermission.hasProcessPermission](#azurestoragequeuesasqueuesaspermissionhasprocesspermission) + * [azure.storage.queue.sas.QueueSasPermission.hasReadPermission](#azurestoragequeuesasqueuesaspermissionhasreadpermission) + * [azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission](#azurestoragequeuesasqueuesaspermissionhasupdatepermission) + * [azure.storage.queue.sas.QueueSasPermission.parse](#azurestoragequeuesasqueuesaspermissionparse) + * [azure.storage.queue.sas.QueueSasPermission.setAddPermission](#azurestoragequeuesasqueuesaspermissionsetaddpermission) + * [azure.storage.queue.sas.QueueSasPermission.setProcessPermission](#azurestoragequeuesasqueuesaspermissionsetprocesspermission) + * [azure.storage.queue.sas.QueueSasPermission.setReadPermission](#azurestoragequeuesasqueuesaspermissionsetreadpermission) + * [azure.storage.queue.sas.QueueSasPermission.setUpdatePermission](#azurestoragequeuesasqueuesaspermissionsetupdatepermission) + * [azure.storage.queue.sas.QueueSasPermission.toString](#azurestoragequeuesasqueuesaspermissiontostring) + * [azure.storage.queue.sas.QueueServiceSasSignatureValues](#azurestoragequeuesasqueueservicesassignaturevalues) + * [azure.storage.queue.sas.QueueServiceSasSignatureValues.QueueServiceSasSignatureValues](#azurestoragequeuesasqueueservicesassignaturevaluesqueueservicesassignaturevalues) + * [azure.storage.queue.QueueClient](#azurestoragequeuequeueclient) + * [azure.storage.queue.QueueClient.QueueClient](#azurestoragequeuequeueclientqueueclient) + * [azure.storage.queue.QueueClient.clearMessages](#azurestoragequeuequeueclientclearmessages) + * [azure.storage.queue.QueueClient.create](#azurestoragequeuequeueclientcreate) + * [azure.storage.queue.QueueClient.delete](#azurestoragequeuequeueclientdelete) + * [azure.storage.queue.QueueClient.deleteMessage](#azurestoragequeuequeueclientdeletemessage) + * [azure.storage.queue.QueueClient.deleteQueue](#azurestoragequeuequeueclientdeletequeue) + * [azure.storage.queue.QueueClient.generateSas](#azurestoragequeuequeueclientgeneratesas) + * [azure.storage.queue.QueueClient.getAccountName](#azurestoragequeuequeueclientgetaccountname) + * [azure.storage.queue.QueueClient.getQueueName](#azurestoragequeuequeueclientgetqueuename) + * [azure.storage.queue.QueueClient.getQueueUrl](#azurestoragequeuequeueclientgetqueueurl) + * [azure.storage.queue.QueueClient.peekMessage](#azurestoragequeuequeueclientpeekmessage) + * [azure.storage.queue.QueueClient.receiveMessage](#azurestoragequeuequeueclientreceivemessage) + * [azure.storage.queue.QueueClient.receiveMessages](#azurestoragequeuequeueclientreceivemessages) + * [azure.storage.queue.QueueClient.sendMessage](#azurestoragequeuequeueclientsendmessage) + * [azure.storage.queue.QueueClientBuilder](#azurestoragequeuequeueclientbuilder) + * [azure.storage.queue.QueueClientBuilder.QueueClientBuilder](#azurestoragequeuequeueclientbuilderqueueclientbuilder) + * [azure.storage.queue.QueueClientBuilder.buildClient](#azurestoragequeuequeueclientbuilderbuildclient) + * [azure.storage.queue.QueueClientBuilder.connectionString](#azurestoragequeuequeueclientbuilderconnectionstring) + * [azure.storage.queue.QueueClientBuilder.credential](#azurestoragequeuequeueclientbuildercredential) + * [azure.storage.queue.QueueClientBuilder.endpoint](#azurestoragequeuequeueclientbuilderendpoint) + * [azure.storage.queue.QueueClientBuilder.httpClient](#azurestoragequeuequeueclientbuilderhttpclient) + * [azure.storage.queue.QueueClientBuilder.queueName](#azurestoragequeuequeueclientbuilderqueuename) + * [azure.storage.queue.QueueClientBuilder.sasToken](#azurestoragequeuequeueclientbuildersastoken) + * [azure.storage.queue.QueueServiceClient](#azurestoragequeuequeueserviceclient) + * [azure.storage.queue.QueueServiceClient.QueueServiceClient](#azurestoragequeuequeueserviceclientqueueserviceclient) + * [azure.storage.queue.QueueServiceClient.createQueue](#azurestoragequeuequeueserviceclientcreatequeue) + * [azure.storage.queue.QueueServiceClient.deleteQueue](#azurestoragequeuequeueserviceclientdeletequeue) + * [azure.storage.queue.QueueServiceClient.generateAccountSas](#azurestoragequeuequeueserviceclientgenerateaccountsas) + * [azure.storage.queue.QueueServiceClient.getAccountName](#azurestoragequeuequeueserviceclientgetaccountname) + * [azure.storage.queue.QueueServiceClient.getQueueClient](#azurestoragequeuequeueserviceclientgetqueueclient) + * [azure.storage.queue.QueueServiceClient.getQueueServiceUrl](#azurestoragequeuequeueserviceclientgetqueueserviceurl) + * [azure.storage.queue.QueueServiceClient.listQueues](#azurestoragequeuequeueserviceclientlistqueues) + * [azure.storage.queue.QueueServiceClientBuilder](#azurestoragequeuequeueserviceclientbuilder) + * [azure.storage.queue.QueueServiceClientBuilder.QueueServiceClientBuilder](#azurestoragequeuequeueserviceclientbuilderqueueserviceclientbuilder) + * [azure.storage.queue.QueueServiceClientBuilder.buildClient](#azurestoragequeuequeueserviceclientbuilderbuildclient) + * [azure.storage.queue.QueueServiceClientBuilder.connectionString](#azurestoragequeuequeueserviceclientbuilderconnectionstring) + * [azure.storage.queue.QueueServiceClientBuilder.credential](#azurestoragequeuequeueserviceclientbuildercredential) + * [azure.storage.queue.QueueServiceClientBuilder.endpoint](#azurestoragequeuequeueserviceclientbuilderendpoint) + * [azure.storage.queue.QueueServiceClientBuilder.httpClient](#azurestoragequeuequeueserviceclientbuilderhttpclient) + * [azure.storage.queue.QueueServiceClientBuilder.sasToken](#azurestoragequeuequeueserviceclientbuildersastoken) + * [azure.object](#azureobject) + * [azure.object.object](#azureobjectobject) + * [azure.object.setSystemProperties](#azureobjectsetsystemproperties) + * [mathworks](#mathworks) + * [mathworks.adx](#mathworksadx) + * [mathworks.adx.NullPolicy](#mathworksadxnullpolicy) + * [mathworks.adx.NullPolicy.NullPolicy](#mathworksadxnullpolicynullpolicy) + * [mathworks.adx.KQLQuery](#mathworksadxkqlquery) + * [mathworks.adx.adxRoot](#mathworksadxadxroot) + * [mathworks.adx.clustersGet](#mathworksadxclustersget) + * [mathworks.adx.createTable](#mathworksadxcreatetable) + * [mathworks.adx.dropTable](#mathworksadxdroptable) + * [mathworks.adx.exportToBlob](#mathworksadxexporttoblob) + * [mathworks.adx.ingestFile](#mathworksadxingestfile) + * [mathworks.adx.ingestFileQueue](#mathworksadxingestfilequeue) + * [mathworks.adx.ingestFromQuery](#mathworksadxingestfromquery) + * [mathworks.adx.ingestInline](#mathworksadxingestinline) + * [mathworks.adx.ingestTable](#mathworksadxingesttable) + * [mathworks.adx.ingestTableQueue](#mathworksadxingesttablequeue) + * [mathworks.adx.isClusterRunning](#mathworksadxisclusterrunning) + * [mathworks.adx.listTables](#mathworksadxlisttables) + * [mathworks.adx.mgtCommand](#mathworksadxmgtcommand) + * [mathworks.adx.run](#mathworksadxrun) + * [mathworks.adx.tSQLQuery](#mathworksadxtsqlquery) + * [mathworks.adx.tableExists](#mathworksadxtableexists) + * [mathworks.internal](#mathworksinternal) + * [mathworks.internal.adx](#mathworksinternaladx) + * [mathworks.internal.adx.buildSettingsFile](#mathworksinternaladxbuildsettingsfile) + * [mathworks.internal.adx.charOrString2Guid](#mathworksinternaladxcharorstring2guid) + * [mathworks.internal.adx.charOrString2String](#mathworksinternaladxcharorstring2string) + * [mathworks.internal.adx.datetime2datetime](#mathworksinternaladxdatetime2datetime) + * [mathworks.internal.adx.dispErrorAdditionalInfo](#mathworksinternaladxdisperroradditionalinfo) + * [mathworks.internal.adx.dispErrorDetails](#mathworksinternaladxdisperrordetails) + * [mathworks.internal.adx.dispErrorResponse](#mathworksinternaladxdisperrorresponse) + * [mathworks.internal.adx.doubleOrSingle2Decimal](#mathworksinternaladxdoubleorsingle2decimal) + * [mathworks.internal.adx.doubleOrSingle2Real](#mathworksinternaladxdoubleorsingle2real) + * [mathworks.internal.adx.duration2Timespan](#mathworksinternaladxduration2timespan) + * [mathworks.internal.adx.exampleCustomRowDecoder](#mathworksinternaladxexamplecustomrowdecoder) + * [mathworks.internal.adx.getDataBearerToken](#mathworksinternaladxgetdatabearertoken) + * [mathworks.internal.adx.getDefaultConfigValue](#mathworksinternaladxgetdefaultconfigvalue) + * [mathworks.internal.adx.getIngestionResources](#mathworksinternaladxgetingestionresources) + * [mathworks.internal.adx.getKustoIdentityToken](#mathworksinternaladxgetkustoidentitytoken) + * [mathworks.internal.adx.getRowWithSchema](#mathworksinternaladxgetrowwithschema) + * [mathworks.internal.adx.getRowsWithSchema](#mathworksinternaladxgetrowswithschema) + * [mathworks.internal.adx.getTableAndSchemas](#mathworksinternaladxgettableandschemas) + * [mathworks.internal.adx.getTableSchema](#mathworksinternaladxgettableschema) + * [mathworks.internal.adx.int2IntOrLong](#mathworksinternaladxint2intorlong) + * [mathworks.internal.adx.isMappableMATLABToKusto](#mathworksinternaladxismappablematlabtokusto) + * [mathworks.internal.adx.kustoSchemaToNamesAndTypes](#mathworksinternaladxkustoschematonamesandtypes) + * [mathworks.internal.adx.loadConfig](#mathworksinternaladxloadconfig) + * [mathworks.internal.adx.logical2Bool](#mathworksinternaladxlogical2bool) + * [mathworks.internal.adx.mapTypesKustoToMATLAB](#mathworksinternaladxmaptypeskustotomatlab) + * [mathworks.internal.adx.mapTypesMATLABToKusto](#mathworksinternaladxmaptypesmatlabtokusto) + * [mathworks.internal.adx.queryV1Response2Tables](#mathworksinternaladxqueryv1response2tables) + * [mathworks.internal.adx.queryV2Response2Tables](#mathworksinternaladxqueryv2response2tables) + * [mathworks.internal.adx.setCustomQueryHeaders](#mathworksinternaladxsetcustomqueryheaders) + * [mathworks.internal.adx.setDefaultConfigValue](#mathworksinternaladxsetdefaultconfigvalue) + * [mathworks.internal.adx.timespanLiteral2duration](#mathworksinternaladxtimespanliteral2duration) + * [mathworks.internal.adx.timespanValue2duration](#mathworksinternaladxtimespanvalue2duration) + * [mathworks.internal.adx.toDynamic](#mathworksinternaladxtodynamic) + * [mathworks.internal.adx.toKustoLiteral](#mathworksinternaladxtokustoliteral) + * [mathworks.internal.adx.validateConfig](#mathworksinternaladxvalidateconfig) + * [mathworks.internal.blob](#mathworksinternalblob) + * [mathworks.internal.blob.clientCopyToBlobContainer](#mathworksinternalblobclientcopytoblobcontainer) + * [mathworks.internal.blob.clientUploadToBlobContainer](#mathworksinternalblobclientuploadtoblobcontainer) + * [mathworks.internal.blob.sanitizeBlobName](#mathworksinternalblobsanitizeblobname) + * [mathworks.internal.curl](#mathworksinternalcurl) + * [mathworks.internal.curl.adxCurlWrite](#mathworksinternalcurladxcurlwrite) + * [mathworks.internal.curl.curlWrite](#mathworksinternalcurlcurlwrite) + * [mathworks.internal.countDown](#mathworksinternalcountdown) + * [mathworks.utils](#mathworksutils) + * [mathworks.utils.jwt](#mathworksutilsjwt) + * [mathworks.utils.jwt.ClaimsJM](#mathworksutilsjwtclaimsjm) + * [mathworks.utils.jwt.ClaimsJM.ClaimsJM](#mathworksutilsjwtclaimsjmclaimsjm) + * [mathworks.utils.jwt.JWT](#mathworksutilsjwtjwt) + * [mathworks.utils.jwt.JWT.JWT](#mathworksutilsjwtjwtjwt) + * [mathworks.utils.jwt.JWT.expiryTime](#mathworksutilsjwtjwtexpirytime) + * [mathworks.utils.jwt.JWT.isExpired](#mathworksutilsjwtjwtisexpired) + * [mathworks.utils.jwt.JWT.isTimeValid](#mathworksutilsjwtjwtistimevalid) + * [mathworks.utils.jwt.JWT.notBeforeTime](#mathworksutilsjwtjwtnotbeforetime) + * [mathworks.utils.msOAuth2Client](#mathworksutilsmsoauth2client) + * [mathworks.utils.msOAuth2Client.acquireClientCredentialToken](#mathworksutilsmsoauth2clientacquireclientcredentialtoken) + * [mathworks.utils.msOAuth2Client.acquireDeviceCodeToken](#mathworksutilsmsoauth2clientacquiredevicecodetoken) + * [mathworks.utils.msOAuth2Client.acquireInteractiveBrowserToken](#mathworksutilsmsoauth2clientacquireinteractivebrowsertoken) + * [mathworks.utils.msOAuth2Client.acquireManagedIdentityToken](#mathworksutilsmsoauth2clientacquiremanagedidentitytoken) + * [mathworks.utils.msOAuth2Client.acquireToken](#mathworksutilsmsoauth2clientacquiretoken) + * [mathworks.utils.msOAuth2Client.addTokenToCache](#mathworksutilsmsoauth2clientaddtokentocache) + * [mathworks.utils.msOAuth2Client.findTokenInCache](#mathworksutilsmsoauth2clientfindtokenincache) + * [mathworks.utils.msOAuth2Client.getFullToken](#mathworksutilsmsoauth2clientgetfulltoken) + * [mathworks.utils.msOAuth2Client.getToken](#mathworksutilsmsoauth2clientgettoken) + * [mathworks.utils.msOAuth2Client.initializeCache](#mathworksutilsmsoauth2clientinitializecache) + * [mathworks.utils.msOAuth2Client.msOAuth2Client](#mathworksutilsmsoauth2clientmsoauth2client) + * [mathworks.utils.msOAuth2Client.refreshToken](#mathworksutilsmsoauth2clientrefreshtoken) + * [mathworks.utils.msOAuth2Client.saveCache](#mathworksutilsmsoauth2clientsavecache) + * [mathworks.utils.UUID](#mathworksutilsuuid) + * [mathworks.utils.addArgs](#mathworksutilsaddargs) + * [Logger](#logger) + * [Logger.Logger](#loggerlogger) + * [Logger.clearLogFile](#loggerclearlogfile) + * [Logger.clearMessages](#loggerclearmessages) + * [Logger.closeLogFile](#loggercloselogfile) + * [Logger.debug](#loggerdebug) + * [Logger.delete](#loggerdelete) + * [Logger.error](#loggererror) + * [Logger.getLogger](#loggergetlogger) + * [Logger.log](#loggerlog) + * [Logger.openLogFile](#loggeropenlogfile) + * [Logger.processMessage](#loggerprocessmessage) + * [Logger.verbose](#loggerverbose) + * [Logger.warning](#loggerwarning) + * [Logger.write](#loggerwrite) + * [AzureCommonRoot](#azurecommonroot) + * [AzureShell](#azureshell) + * [AzureStorageExplorer](#azurestorageexplorer) + * [Logger](#logger) + * [configureCredentials](#configurecredentials) + * [configureProxyOptions](#configureproxyoptions) + * [createKeyVaultClient](#createkeyvaultclient) + * [createStorageClient](#createstorageclient) + * [initialize](#initialize) + * [loadConfigurationSettings](#loadconfigurationsettings) + +## Help + +### adx + +### adx.control + +### adx.control.api + +### adx.control.api.AttachedDatabaseConfigurations + +Superclass: adx.control.BaseClient + +```text +AttachedDatabaseConfigurations No description provided + + AttachedDatabaseConfigurations Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + AttachedDatabaseConfigurations Methods: + + AttachedDatabaseConfigurations - Constructor + attachedDatabaseConfigurationsCheckNameAvailability - + attachedDatabaseConfigurationsCreateOrUpdate - + attachedDatabaseConfigurationsDelete - + attachedDatabaseConfigurationsGet - + attachedDatabaseConfigurationsListByCluster - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.AttachedDatabaseConfigurations.AttachedDatabaseConfigurations + +```text +AttachedDatabaseConfigurations Constructor, creates a AttachedDatabaseConfigurations instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.AttachedDatabaseConfigurations(); + + % Create a client for alternative server/base URI + client = adx.control.api.AttachedDatabaseConfigurations("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.AttachedDatabaseConfigurations("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.AttachedDatabaseConfigurations("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCheckNameAvailability + +```text +attachedDatabaseConfigurationsCheckNameAvailability No summary provided + Checks that the attached database configuration resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + AttachedDatabaseConfigurationsCheckNameRequest - The name of the resource., Type: AttachedDatabaseConfigurationsCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsCreateOrUpdate + +```text +attachedDatabaseConfigurationsCreateOrUpdate No summary provided + Creates or updates an attached database configuration. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + AttachedDatabaseConfiguration - The database parameters supplied to the CreateOrUpdate operation., Type: AttachedDatabaseConfiguration + Required properties in the model for this call: + Optional properties in the model for this call: + location + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the database. + 201: Successfully created the database. + 202: Accepted the create database request. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfiguration + + See Also: adx.control.models.AttachedDatabaseConfiguration +``` + +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsDelete + +```text +attachedDatabaseConfigurationsDelete No summary provided + Deletes the attached database configuration with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the database. + 202: Accepted. + 204: The specified database does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsGet + +```text +attachedDatabaseConfigurationsGet No summary provided + Returns an attached database configuration. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified attached database configuration. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfiguration + + See Also: adx.control.models.AttachedDatabaseConfiguration +``` + +#### adx.control.api.AttachedDatabaseConfigurations.attachedDatabaseConfigurationsListByCluster + +```text +attachedDatabaseConfigurationsListByCluster No summary provided + Returns the list of attached database configurations of the given Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of attached database configurations. + 0: Error response describing why the operation failed. + + Returns: AttachedDatabaseConfigurationListResult + + See Also: adx.control.models.AttachedDatabaseConfigurationListResult +``` + +### adx.control.api.ClusterPrincipalAssignments + +Superclass: adx.control.BaseClient + +```text +ClusterPrincipalAssignments No description provided + + ClusterPrincipalAssignments Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + ClusterPrincipalAssignments Methods: + + ClusterPrincipalAssignments - Constructor + clusterPrincipalAssignmentsCheckNameAvailability - + clusterPrincipalAssignmentsCreateOrUpdate - + clusterPrincipalAssignmentsDelete - + clusterPrincipalAssignmentsGet - + clusterPrincipalAssignmentsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.ClusterPrincipalAssignments.ClusterPrincipalAssignments + +```text +ClusterPrincipalAssignments Constructor, creates a ClusterPrincipalAssignments instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.ClusterPrincipalAssignments(); + + % Create a client for alternative server/base URI + client = adx.control.api.ClusterPrincipalAssignments("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.ClusterPrincipalAssignments("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.ClusterPrincipalAssignments("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCheckNameAvailability + +```text +clusterPrincipalAssignmentsCheckNameAvailability No summary provided + Checks that the principal assignment name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + ClusterPrincipalAssignmentCheckNameRequest - The name of the principal assignment., Type: ClusterPrincipalAssignmentCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsCreateOrUpdate + +```text +clusterPrincipalAssignmentsCreateOrUpdate No summary provided + Create a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + ClusterPrincipalAssignment - The Kusto cluster principalAssignment''s parameters supplied for the operation., Type: ClusterPrincipalAssignment + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the PrincipalAssignment. + 201: Successfully created the principalAssignment. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignment + + See Also: adx.control.models.ClusterPrincipalAssignment +``` + +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsDelete + +```text +clusterPrincipalAssignmentsDelete No summary provided + Deletes a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- principalAssignments deleted successfully. + 202: Accepted the delete principalAssignments request. + 204: NoContent -- principalAssignments does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsGet + +```text +clusterPrincipalAssignmentsGet No summary provided + Gets a Kusto cluster principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster principal assignment object. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignment + + See Also: adx.control.models.ClusterPrincipalAssignment +``` + +#### adx.control.api.ClusterPrincipalAssignments.clusterPrincipalAssignmentsList + +```text +clusterPrincipalAssignmentsList No summary provided + Lists all Kusto cluster principalAssignments. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterPrincipalAssignmentListResult + + See Also: adx.control.models.ClusterPrincipalAssignmentListResult +``` + +### adx.control.api.Clusters + +Superclass: adx.control.BaseClient + +```text +Clusters No description provided + + Clusters Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Clusters Methods: + + Clusters - Constructor + clustersAddLanguageExtensions - + clustersCheckNameAvailability - + clustersCreateOrUpdate - + clustersDelete - + clustersDetachFollowerDatabases - + clustersDiagnoseVirtualNetwork - + clustersGet - + clustersList - + clustersListByResourceGroup - + clustersListFollowerDatabases - + clustersListLanguageExtensions - + clustersListSkusByResource - + clustersMigrate - + clustersRemoveLanguageExtensions - + clustersStart - + clustersStop - + clustersUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.Clusters.Clusters + +```text +Clusters Constructor, creates a Clusters instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Clusters(); + + % Create a client for alternative server/base URI + client = adx.control.api.Clusters("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Clusters("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Clusters("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.Clusters.clustersAddLanguageExtensions + +```text +clustersAddLanguageExtensions No summary provided + Add a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + LanguageExtensionsList - The language extensions to add., Type: LanguageExtensionsList + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersCheckNameAvailability + +```text +clustersCheckNameAvailability No summary provided + Checks that the cluster name is valid and is not already in use. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + ClusterCheckNameRequest - The name of the cluster., Type: ClusterCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.Clusters.clustersCreateOrUpdate + +```text +clustersCreateOrUpdate No summary provided + Create or update a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Cluster - The Kusto cluster parameters supplied to the CreateOrUpdate operation., Type: Cluster + Required properties in the model for this call: + sku + Optional properties in the model for this call: + systemData + zones + identity + xproperties + etag + + Optional name-value parameters: + If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + If_None_Match - Set to ''*'' to allow a new cluster to be created, but to prevent updating an existing cluster. Other values will result in a 412 Pre-condition Failed response., Type: string + + Responses: + 200: Successfully updated the Cluster. + 201: Successfully created the cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` + +#### adx.control.api.Clusters.clustersDelete + +```text +clustersDelete No summary provided + Deletes a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- cluster deleted successfully. + 202: Accepted the delete cluster request. + 204: NoContent -- cluster does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersDetachFollowerDatabases + +```text +clustersDetachFollowerDatabases No summary provided + Detaches all followers of a database owned by this cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + FollowerDatabaseDefinition - The follower databases properties to remove., Type: FollowerDatabaseDefinition + Required properties in the model for this call: + clusterResourceId + attachedDatabaseConfigurationName + Optional properties in the model for this call: + databaseName + tableLevelSharingProperties + databaseShareOrigin + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersDiagnoseVirtualNetwork + +```text +clustersDiagnoseVirtualNetwork No summary provided + Diagnoses network connectivity status for external resources on which the service is dependent on. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: DiagnoseVirtualNetworkResult + + See Also: adx.control.models.DiagnoseVirtualNetworkResult +``` + +#### adx.control.api.Clusters.clustersGet + +```text +clustersGet No summary provided + Gets a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` + +#### adx.control.api.Clusters.clustersList + +```text +clustersList No summary provided + Lists all Kusto clusters within a subscription. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterListResult + + See Also: adx.control.models.ClusterListResult +``` + +#### adx.control.api.Clusters.clustersListByResourceGroup + +```text +clustersListByResourceGroup No summary provided + Lists all Kusto clusters within a resource group. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ClusterListResult + + See Also: adx.control.models.ClusterListResult +``` + +#### adx.control.api.Clusters.clustersListFollowerDatabases + +```text +clustersListFollowerDatabases No summary provided + Returns a list of databases that are owned by this cluster and were followed by another cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of followed databases. + 0: Error response describing why the operation failed. + + Returns: FollowerDatabaseListResult + + See Also: adx.control.models.FollowerDatabaseListResult +``` + +#### adx.control.api.Clusters.clustersListLanguageExtensions + +```text +clustersListLanguageExtensions No summary provided + Returns a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of language extensions. + 0: Error response describing why the operation failed. + + Returns: LanguageExtensionsList + + See Also: adx.control.models.LanguageExtensionsList +``` + +#### adx.control.api.Clusters.clustersListSkusByResource + +```text +clustersListSkusByResource No summary provided + Returns the SKUs available for the provided resource. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: ListResourceSkusResult + + See Also: adx.control.models.ListResourceSkusResult +``` + +#### adx.control.api.Clusters.clustersMigrate + +```text +clustersMigrate No summary provided + Migrate data from a Kusto cluster to another cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + ClusterMigrateRequest - The cluster migrate request parameters., Type: ClusterMigrateRequest + Required properties in the model for this call: + clusterResourceId + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK. + 202: Accepted. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersRemoveLanguageExtensions + +```text +clustersRemoveLanguageExtensions No summary provided + Remove a list of language extensions that can run within KQL queries. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + LanguageExtensionsList - The language extensions to remove., Type: LanguageExtensionsList + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersStart + +```text +clustersStart No summary provided + Starts a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersStop + +```text +clustersStop No summary provided + Stops a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Clusters.clustersUpdate + +```text +clustersUpdate No summary provided + Update a Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + ClusterUpdate - The Kusto cluster parameters supplied to the Update operation., Type: ClusterUpdate + Required properties in the model for this call: + Optional properties in the model for this call: + tags + location + sku + identity + xproperties + + Optional name-value parameters: + If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + + Responses: + 200: Successfully updated the Cluster. + 201: Successfully updated the cluster. + 202: Successfully updated the cluster. + 0: Error response describing why the operation failed. + + Returns: Cluster + + See Also: adx.control.models.Cluster +``` + +### adx.control.api.DataConnections + +Superclass: adx.control.BaseClient + +```text +DataConnections No description provided + + DataConnections Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + DataConnections Methods: + + DataConnections - Constructor + dataConnectionsCheckNameAvailability - + dataConnectionsCreateOrUpdate - + dataConnectionsDataConnectionValidation - + dataConnectionsDelete - + dataConnectionsGet - + dataConnectionsListByDatabase - + dataConnectionsUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.DataConnections.DataConnections + +```text +DataConnections Constructor, creates a DataConnections instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.DataConnections(); + + % Create a client for alternative server/base URI + client = adx.control.api.DataConnections("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.DataConnections("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.DataConnections("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.DataConnections.dataConnectionsCheckNameAvailability + +```text +dataConnectionsCheckNameAvailability No summary provided + Checks that the data connection name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DataConnectionCheckNameRequest - The name of the data connection., Type: DataConnectionCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the Kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.DataConnections.dataConnectionsCreateOrUpdate + +```text +dataConnectionsCreateOrUpdate No summary provided + Creates or updates a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DataConnection - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnection + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + No optional parameters + + Responses: + 200: Successfully updated the data connection. + 201: Successfully created the data connection. + 202: Accepted the create data connection request. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` + +#### adx.control.api.DataConnections.dataConnectionsDataConnectionValidation + +```text +dataConnectionsDataConnectionValidation No summary provided + Checks that the data connection parameters are valid. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DataConnectionValidation - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnectionValidation + Required properties in the model for this call: + Optional properties in the model for this call: + dataConnectionName + xproperties + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 202: Accepted + 0: Error response describing why the operation failed. + + Returns: DataConnectionValidationListResult + + See Also: adx.control.models.DataConnectionValidationListResult +``` + +#### adx.control.api.DataConnections.dataConnectionsDelete + +```text +dataConnectionsDelete No summary provided + Deletes the data connection with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the data connection. + 202: Accepted. + 204: The specified data connection does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.DataConnections.dataConnectionsGet + +```text +dataConnectionsGet No summary provided + Returns a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified data connection. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` + +#### adx.control.api.DataConnections.dataConnectionsListByDatabase + +```text +dataConnectionsListByDatabase No summary provided + Returns the list of data connections of the given Kusto database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of data connections. + 0: Error response describing why the operation failed. + + Returns: DataConnectionListResult + + See Also: adx.control.models.DataConnectionListResult +``` + +#### adx.control.api.DataConnections.dataConnectionsUpdate + +```text +dataConnectionsUpdate No summary provided + Updates a data connection. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + dataConnectionName - The name of the data connection., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DataConnection - The data connection parameters supplied to the Update operation., Type: DataConnection + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + No optional parameters + + Responses: + 200: Successfully updated the data connection. + 201: Successfully updated the data connection. + 202: Accepted the update data connection request. + 0: Error response describing why the operation failed. + + Returns: DataConnection + + See Also: adx.control.models.DataConnection +``` + +### adx.control.api.DatabasePrincipalAssignments + +Superclass: adx.control.BaseClient + +```text +DatabasePrincipalAssignments No description provided + + DatabasePrincipalAssignments Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + DatabasePrincipalAssignments Methods: + + DatabasePrincipalAssignments - Constructor + databasePrincipalAssignmentsCheckNameAvailability - + databasePrincipalAssignmentsCreateOrUpdate - + databasePrincipalAssignmentsDelete - + databasePrincipalAssignmentsGet - + databasePrincipalAssignmentsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.DatabasePrincipalAssignments.DatabasePrincipalAssignments + +```text +DatabasePrincipalAssignments Constructor, creates a DatabasePrincipalAssignments instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.DatabasePrincipalAssignments(); + + % Create a client for alternative server/base URI + client = adx.control.api.DatabasePrincipalAssignments("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.DatabasePrincipalAssignments("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.DatabasePrincipalAssignments("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCheckNameAvailability + +```text +databasePrincipalAssignmentsCheckNameAvailability No summary provided + Checks that the database principal assignment is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + DatabasePrincipalAssignmentCheckNameRequest - The name of the resource., Type: DatabasePrincipalAssignmentCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsCreateOrUpdate + +```text +databasePrincipalAssignmentsCreateOrUpdate No summary provided + Creates a Kusto cluster database principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalAssignment - The Kusto principalAssignments parameters supplied for the operation., Type: DatabasePrincipalAssignment + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + + No optional parameters + + Responses: + 200: Successfully updated the PrincipalAssignments. + 201: Successfully created the principalAssignments. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignment + + See Also: adx.control.models.DatabasePrincipalAssignment +``` + +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsDelete + +```text +databasePrincipalAssignmentsDelete No summary provided + Deletes a Kusto principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- principalAssignments deleted successfully. + 202: Accepted the delete principalAssignments request. + 204: NoContent -- principalAssignments does not exist in the subscription. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsGet + +```text +databasePrincipalAssignmentsGet No summary provided + Gets a Kusto cluster database principalAssignment. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + principalAssignmentName - The name of the Kusto principalAssignment., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The Kusto cluster database principal assignment object. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignment + + See Also: adx.control.models.DatabasePrincipalAssignment +``` + +#### adx.control.api.DatabasePrincipalAssignments.databasePrincipalAssignmentsList + +```text +databasePrincipalAssignmentsList No summary provided + Lists all Kusto cluster database principalAssignments. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalAssignmentListResult + + See Also: adx.control.models.DatabasePrincipalAssignmentListResult +``` + +### adx.control.api.Databases + +Superclass: adx.control.BaseClient + +```text +Databases No description provided + + Databases Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Databases Methods: + + Databases - Constructor + databaseInviteFollower - + databasesAddPrincipals - + databasesCheckNameAvailability - + databasesCreateOrUpdate - + databasesDelete - + databasesGet - + databasesListByCluster - + databasesListPrincipals - + databasesRemovePrincipals - + databasesUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.Databases.Databases + +```text +Databases Constructor, creates a Databases instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Databases(); + + % Create a client for alternative server/base URI + client = adx.control.api.Databases("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Databases("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Databases("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.Databases.databaseInviteFollower + +```text +databaseInviteFollower No summary provided + Generates an invitation token that allows attaching a follower database to this database. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + DatabaseInviteFollowerRequest - The follower invitation request parameters., Type: DatabaseInviteFollowerRequest + Required properties in the model for this call: + inviteeEmail + Optional properties in the model for this call: + tableLevelSharingProperties + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: DatabaseInviteFollowerResult + + See Also: adx.control.models.DatabaseInviteFollowerResult +``` + +#### adx.control.api.Databases.databasesAddPrincipals + +```text +databasesAddPrincipals No summary provided + Add Database principals permissions. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalListRequest - List of database principals to add., Type: DatabasePrincipalListRequest + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK -- Successfully added the list of database principals. Returns the updated list of principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult +``` + +#### adx.control.api.Databases.databasesCheckNameAvailability + +```text +databasesCheckNameAvailability No summary provided + Checks that the databases resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + CheckNameRequest - The name of the resource., Type: CheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.Databases.databasesCreateOrUpdate + +```text +databasesCreateOrUpdate No summary provided + Creates or updates a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Database - The database parameters supplied to the CreateOrUpdate operation., Type: Database + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + Optional name-value parameters: + callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + + Responses: + 200: Successfully updated the database. + 201: Successfully created the database. + 202: Accepted the create database request. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database +``` + +#### adx.control.api.Databases.databasesDelete + +```text +databasesDelete No summary provided + Deletes the database with the given name. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the database. + 202: Accepted. + 204: The specified database does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.Databases.databasesGet + +```text +databasesGet No summary provided + Returns a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the specified database. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database +``` + +#### adx.control.api.Databases.databasesListByCluster + +```text +databasesListByCluster No summary provided + Returns the list of databases of the given Kusto cluster. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + Optional name-value parameters: + top - limit the number of results, Type: int32, Format: int32 + skiptoken - Skiptoken is only used if a previous operation returned a partial result. If a previous response contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that specifies a starting point to use for subsequent calls., Type: string + + Responses: + 200: Successfully retrieved the list of databases. + 0: Error response describing why the operation failed. + + Returns: DatabaseListResult + + See Also: adx.control.models.DatabaseListResult +``` + +#### adx.control.api.Databases.databasesListPrincipals + +```text +databasesListPrincipals No summary provided + Returns a list of database principals of the given Kusto cluster and database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the list of database principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult +``` + +#### adx.control.api.Databases.databasesRemovePrincipals + +```text +databasesRemovePrincipals No summary provided + Remove Database principals permissions. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + DatabasePrincipalListRequest - List of database principals to remove., Type: DatabasePrincipalListRequest + Required properties in the model for this call: + Optional properties in the model for this call: + value + + No optional parameters + + Responses: + 200: OK -- Successfully removed the list of database principals. Returns the updated list of principals. + 0: Error response describing why the operation failed. + + Returns: DatabasePrincipalListResult + + See Also: adx.control.models.DatabasePrincipalListResult +``` + +#### adx.control.api.Databases.databasesUpdate + +```text +databasesUpdate No summary provided + Updates a database. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + subscriptionId - The ID of the target subscription., Type: string + api_version - The API version to use for this operation., Type: string + Database - The database parameters supplied to the Update operation., Type: Database + Required properties in the model for this call: + kind + Optional properties in the model for this call: + location + + Optional name-value parameters: + callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + + Responses: + 200: Successfully updated the database. + 201: Successfully updated the database. + 202: Accepted the update database request. + 0: Error response describing why the operation failed. + + Returns: Database + + See Also: adx.control.models.Database +``` + +### adx.control.api.Default + +Superclass: adx.control.BaseClient + +```text +Default No description provided + + Default Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Default Methods: + + Default - Constructor + clustersListSkus - + skusList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.Default.Default + +```text +Default Constructor, creates a Default instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Default(); + + % Create a client for alternative server/base URI + client = adx.control.api.Default("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Default("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Default("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.Default.clustersListSkus + +```text +clustersListSkus No summary provided + Lists eligible SKUs for Kusto resource provider. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: SkuDescriptionList + + See Also: adx.control.models.SkuDescriptionList +``` + +#### adx.control.api.Default.skusList + +```text +skusList No summary provided + Lists eligible region SKUs for Kusto resource provider by Azure region. + + Required parameters: + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + + No optional parameters + + Responses: + 200: OK. + 0: Error response describing why the operation failed. + + Returns: SkuDescriptionList + + See Also: adx.control.models.SkuDescriptionList +``` + +### adx.control.api.ManagedPrivateEndpoints + +Superclass: adx.control.BaseClient + +```text +ManagedPrivateEndpoints No description provided + + ManagedPrivateEndpoints Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + ManagedPrivateEndpoints Methods: + + ManagedPrivateEndpoints - Constructor + managedPrivateEndpointsCheckNameAvailability - + managedPrivateEndpointsCreateOrUpdate - + managedPrivateEndpointsDelete - + managedPrivateEndpointsGet - + managedPrivateEndpointsList - + managedPrivateEndpointsUpdate - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.ManagedPrivateEndpoints.ManagedPrivateEndpoints + +```text +ManagedPrivateEndpoints Constructor, creates a ManagedPrivateEndpoints instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.ManagedPrivateEndpoints(); + + % Create a client for alternative server/base URI + client = adx.control.api.ManagedPrivateEndpoints("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.ManagedPrivateEndpoints("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.ManagedPrivateEndpoints("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCheckNameAvailability + +```text +managedPrivateEndpointsCheckNameAvailability No summary provided + Checks that the managed private endpoints resource name is valid and is not already in use. + + Required parameters: + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + subscriptionId - The ID of the target subscription., Type: string + ManagedPrivateEndpointsCheckNameRequest - The name of the resource., Type: ManagedPrivateEndpointsCheckNameRequest + Required properties in the model for this call: + name + type + Optional properties in the model for this call: + + No optional parameters + + Responses: + 200: OK -- Operation to check the kusto resource name availability was successful. + 0: Error response describing why the operation failed. + + Returns: CheckNameResult + + See Also: adx.control.models.CheckNameResult +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsCreateOrUpdate + +```text +managedPrivateEndpointsCreateOrUpdate No summary provided + Creates a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully updated the managed private endpoint. + 201: Successfully created the managed private endpoint. + 202: Successfully accepted the managed private endpoint. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsDelete + +```text +managedPrivateEndpointsDelete No summary provided + Deletes a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK -- managed private endpoint deleted successfully. + 202: Accepted the delete managed private endpoint request. + 204: NoContent -- If the managed private endpoint resource is already deleted, this is the expected status code. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsGet + +```text +managedPrivateEndpointsGet No summary provided + Gets a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The managed private endpoint object. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsList + +```text +managedPrivateEndpointsList No summary provided + Returns the list of managed private endpoints. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of managed private endpoints. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpointListResult + + See Also: adx.control.models.ManagedPrivateEndpointListResult +``` + +#### adx.control.api.ManagedPrivateEndpoints.managedPrivateEndpointsUpdate + +```text +managedPrivateEndpointsUpdate No summary provided + Updates a managed private endpoint. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + managedPrivateEndpointName - The name of the managed private endpoint., Type: string + api_version - The API version to use for this operation., Type: string + ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully updated the managed private endpoint. + 202: Accepted the update request of the managed private endpoint. + 0: Error response describing why the operation failed. + + Returns: ManagedPrivateEndpoint + + See Also: adx.control.models.ManagedPrivateEndpoint +``` + +### adx.control.api.OperationResults + +Superclass: adx.control.BaseClient + +```text +OperationResults No description provided + + OperationResults Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + OperationResults Methods: + + OperationResults - Constructor + operationsResultsGet - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.OperationResults.OperationResults + +```text +OperationResults Constructor, creates a OperationResults instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.OperationResults(); + + % Create a client for alternative server/base URI + client = adx.control.api.OperationResults("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.OperationResults("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.OperationResults("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.OperationResults.operationsResultsGet + +```text +operationsResultsGet No summary provided + Returns operation results. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + location - The name of Azure region., Type: string + operationId - The ID of an ongoing async operation., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved the operation result. + 0: Error response describing why the operation failed. + + Returns: OperationResult + + See Also: adx.control.models.OperationResult +``` + +### adx.control.api.Operations + +Superclass: adx.control.BaseClient + +```text +Operations No description provided + + Operations Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Operations Methods: + + Operations - Constructor + operationsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.Operations.Operations + +```text +Operations Constructor, creates a Operations instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Operations(); + + % Create a client for alternative server/base URI + client = adx.control.api.Operations("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Operations("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Operations("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.Operations.operationsList + +```text +operationsList No summary provided + Lists available operations for the Microsoft.Kusto provider. + + Required parameters: + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The operation was successful. The response contains the list of available operations. + 0: Error response describing why the operation failed. + + Returns: OperationListResult + + See Also: adx.control.models.OperationListResult +``` + +### adx.control.api.OutboundNetworkDependenciesEndpoints + +Superclass: adx.control.BaseClient + +```text +OutboundNetworkDependenciesEndpoints No description provided + + OutboundNetworkDependenciesEndpoints Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + OutboundNetworkDependenciesEndpoints Methods: + + OutboundNetworkDependenciesEndpoints - Constructor + clustersListOutboundNetworkDependenciesEndpoints - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.OutboundNetworkDependenciesEndpoints.OutboundNetworkDependenciesEndpoints + +```text +OutboundNetworkDependenciesEndpoints Constructor, creates a OutboundNetworkDependenciesEndpoints instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.OutboundNetworkDependenciesEndpoints(); + + % Create a client for alternative server/base URI + client = adx.control.api.OutboundNetworkDependenciesEndpoints("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.OutboundNetworkDependenciesEndpoints("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.OutboundNetworkDependenciesEndpoints("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.OutboundNetworkDependenciesEndpoints.clustersListOutboundNetworkDependenciesEndpoints + +```text +clustersListOutboundNetworkDependenciesEndpoints No summary provided + Gets the network endpoints of all outbound dependencies of a Kusto cluster + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: OK + 0: Error from the RP + + Returns: OutboundNetworkDependenciesEndpointListResult + + See Also: adx.control.models.OutboundNetworkDependenciesEndpointListResult +``` + +### adx.control.api.PrivateEndpointConnections + +Superclass: adx.control.BaseClient + +```text +PrivateEndpointConnections No description provided + + PrivateEndpointConnections Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + PrivateEndpointConnections Methods: + + PrivateEndpointConnections - Constructor + privateEndpointConnectionsCreateOrUpdate - + privateEndpointConnectionsDelete - + privateEndpointConnectionsGet - + privateEndpointConnectionsList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.PrivateEndpointConnections.PrivateEndpointConnections + +```text +PrivateEndpointConnections Constructor, creates a PrivateEndpointConnections instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.PrivateEndpointConnections(); + + % Create a client for alternative server/base URI + client = adx.control.api.PrivateEndpointConnections("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.PrivateEndpointConnections("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.PrivateEndpointConnections("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsCreateOrUpdate + +```text +privateEndpointConnectionsCreateOrUpdate No summary provided + Approve or reject a private endpoint connection with a given name. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + PrivateEndpointConnection - No description provided, Type: PrivateEndpointConnection + Required properties in the model for this call: + Optional properties in the model for this call: + xproperties + systemData + + No optional parameters + + Responses: + 200: Successfully approved or rejected private endpoint connection. + 201: Accepted. The private endpoint connection update will complete asynchronously. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnection + + See Also: adx.control.models.PrivateEndpointConnection +``` + +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsDelete + +```text +privateEndpointConnectionsDelete No summary provided + Deletes a private endpoint connection with a given name. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully deleted the private endpoint connection. + 202: Accepted. The private endpoint connection delete will complete asynchronously. + 204: Private endpoint connection does not exist. + 0: Error response describing why the operation failed. + + Returns: + + See Also: adx.control.models. +``` + +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsGet + +```text +privateEndpointConnectionsGet No summary provided + Gets a private endpoint connection. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateEndpointConnectionName - The name of the private endpoint connection., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved a specified private endpoint connection. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnection + + See Also: adx.control.models.PrivateEndpointConnection +``` + +#### adx.control.api.PrivateEndpointConnections.privateEndpointConnectionsList + +```text +privateEndpointConnectionsList No summary provided + Returns the list of private endpoint connections. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of private endpoint connections. + 0: Error response describing why the operation failed. + + Returns: PrivateEndpointConnectionListResult + + See Also: adx.control.models.PrivateEndpointConnectionListResult +``` + +### adx.control.api.PrivateLinkResources + +Superclass: adx.control.BaseClient + +```text +PrivateLinkResources No description provided + + PrivateLinkResources Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + PrivateLinkResources Methods: + + PrivateLinkResources - Constructor + privateLinkResourcesGet - + privateLinkResourcesList - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.PrivateLinkResources.PrivateLinkResources + +```text +PrivateLinkResources Constructor, creates a PrivateLinkResources instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.PrivateLinkResources(); + + % Create a client for alternative server/base URI + client = adx.control.api.PrivateLinkResources("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.PrivateLinkResources("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.PrivateLinkResources("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.PrivateLinkResources.privateLinkResourcesGet + +```text +privateLinkResourcesGet No summary provided + Gets a private link resource. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + privateLinkResourceName - The name of the private link resource., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved a specified private link resource. + 0: Error response describing why the operation failed. + + Returns: PrivateLinkResource + + See Also: adx.control.models.PrivateLinkResource +``` + +#### adx.control.api.PrivateLinkResources.privateLinkResourcesList + +```text +privateLinkResourcesList No summary provided + Returns the list of private link resources. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: Successfully retrieved private link resources. + 0: Error response describing why the operation failed. + + Returns: PrivateLinkResourceListResult + + See Also: adx.control.models.PrivateLinkResourceListResult +``` + +### adx.control.api.Scripts + +Superclass: adx.control.BaseClient + +```text +Scripts No description provided + + Scripts Properties: + + serverUri - Base URI to use when calling the API. Allows using a different server + than specified in the original API spec. + httpOptions - HTTPOptions used by all requests. + preferredAuthMethod - If operation supports multiple authentication methods, specified which + method to prefer. + bearerToken - If Bearer token authentication is used, the token can be supplied + here. Note the token is only used if operations are called for which + the API explicitly specified that Bearer authentication is supported. + If this has not been specified in the spec but most operations do + require Bearer authentication, consider adding the relevant header to + all requests in the preSend method. + apiKey - If API key authentication is used, the key can be supplied here. + Note the key is only used if operations are called for which + the API explicitly specified that API key authentication is supported. + If this has not been specified in the spec but most operations do + require API key authentication, consider adding the API key to all + requests in the preSend method. + httpCredentials - If Basic or Digest authentication is supported username/password + credentials can be supplied here as matlab.net.http.Credentials. Note + these are only actively used if operations are called for which the + API spec has specified they require Basic authentication. If this has + not been specified in the spec but most operations do require + Basic authentication, consider setting the Credentials property in the + httpOptions rather than through httpCredentials. + cookies - Cookie jar. The cookie jar is shared across all Api classes in the + same package. All responses are automatically parsed for Set-Cookie + headers and cookies are automatically added to the jar. Similarly + cookies are added to outgoing requests if there are matching cookies + in the jar for the given request. Cookies can also be added manually + by calling the setCookies method on the cookies property. The cookie + jar is also saved to disk (cookies.mat in the same directory as + BaseClient) and reloaded in new MATLAB sessions. + + Scripts Methods: + + Scripts - Constructor + scriptsListByDatabase - + + See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + CookieJar.setCookies, control.BaseClient +``` + +#### adx.control.api.Scripts.Scripts + +```text +Scripts Constructor, creates a Scripts instance. + When called without inputs, tries to load configuration + options from JSON file 'adx.Client.Settings.json'. + If this file is not present, the instance is initialized with + default configuration option. An alternative configuration + file can be provided through the "configFile" Name-Value pair. + All other properties of the instance can also be overridden + using Name-Value pairs where Name equals the property name. + + Examples: + + % Create a client with default options and serverUri + % as parsed from OpenAPI spec (if available) + client = adx.control.api.Scripts(); + + % Create a client for alternative server/base URI + client = adx.control.api.Scripts("serverUri","https://example.com:1234/api/"); + + % Create a client loading configuration options from + % JSON configuration file + client = adx.control.api.Scripts("configFile","myconfig.json"); + + % Create a client with alternative HTTPOptions and an API key + client = adx.control.api.Scripts("httpOptions",... + matlab.net.http.HTTPOptions("ConnectTimeout",42),... + "apiKey", "ABC123"); +``` + +#### adx.control.api.Scripts.scriptsListByDatabase + +```text +scriptsListByDatabase No summary provided + Returns the list of database scripts for given database. + + Required parameters: + subscriptionId - The ID of the target subscription., Type: string + resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + clusterName - The name of the Kusto cluster., Type: string + databaseName - The name of the database in the Kusto cluster., Type: string + api_version - The API version to use for this operation., Type: string + + No optional parameters + + Responses: + 200: The list result of Kusto database scripts. + 0: Error response describing why the operation failed. + + Returns: ScriptListResult + + See Also: adx.control.models.ScriptListResult +``` + +### adx.control.models + +### adx.control.models.AcceptedAudiences + +Superclass: adx.control.JSONMapper + +```text +AcceptedAudiences Represents an accepted audience trusted by the cluster. + + AcceptedAudiences Properties: + value - GUID or valid URL representing an accepted audience. - type: string +``` + +#### adx.control.models.AcceptedAudiences.AcceptedAudiences + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 + +Superclass: adx.control.JSONEnum + +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided +``` + +```text +Enumeration values: + Union + Replace + None + +``` + +#### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 + +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided +``` + +### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 + +Superclass: adx.control.JSONEnum + +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided +``` + +```text +Enumeration values: + Union + Replace + None + +``` + +#### adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 + +```text +AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided +``` + +### adx.control.models.AttachedDatabaseConfiguration + +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfiguration Class representing an attached database configuration. + + AttachedDatabaseConfiguration Properties: + location - Resource location. - type: string + xproperties - type: AttachedDatabaseConfigurationProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.AttachedDatabaseConfiguration.AttachedDatabaseConfiguration + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfigurationListResult + +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfigurationListResult The list attached database configurations operation response. + + AttachedDatabaseConfigurationListResult Properties: + value - The list of attached database configurations. - type: array of AttachedDatabaseConfiguration +``` + +#### adx.control.models.AttachedDatabaseConfigurationListResult.AttachedDatabaseConfigurationListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfigurationProperties + +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfigurationProperties Class representing the an attached database configuration properties of kind specific. + + AttachedDatabaseConfigurationProperties Properties: + provisioningState - type: ProvisioningState + databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + defaultPrincipalsModificationKind - The default principals modification kind - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string +``` + +#### adx.control.models.AttachedDatabaseConfigurationProperties.AttachedDatabaseConfigurationProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfigurationProperties_1 + +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfigurationProperties_1 Class representing the an attached database configuration properties of kind specific. + + AttachedDatabaseConfigurationProperties_1 Properties: + provisioningState - type: ProvisioningState + databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + defaultPrincipalsModificationKind - The default principals modification kind - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string +``` + +#### adx.control.models.AttachedDatabaseConfigurationProperties_1.AttachedDatabaseConfigurationProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +AttachedDatabaseConfigurationsCheckNameRequest The result returned from a AttachedDatabaseConfigurations check name availability request. + + AttachedDatabaseConfigurationsCheckNameRequest Properties: + name - Attached database resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/attachedDatabaseConfigurations. - type: string +``` + +#### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest.AttachedDatabaseConfigurationsCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_attachedDatabaseConfigurations + +``` + +#### adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum + +```text +AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.AzureCapacity + +Superclass: adx.control.JSONMapper + +```text +AzureCapacity Azure capacity definition. + + AzureCapacity Properties: + scaleType - Scale type. - type: string + minimum - Minimum allowed capacity. - type: int32 + maximum - Maximum allowed capacity. - type: int32 + default - The default capacity that would be used. - type: int32 +``` + +#### adx.control.models.AzureCapacity.AzureCapacity + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AzureCapacityScaleTypeEnum + +Superclass: adx.control.JSONEnum + +```text +AzureCapacityScaleTypeEnum No description provided +``` + +```text +Enumeration values: + automatic + manual + none + +``` + +#### adx.control.models.AzureCapacityScaleTypeEnum.AzureCapacityScaleTypeEnum + +```text +AzureCapacityScaleTypeEnum No description provided +``` + +### adx.control.models.AzureResourceSku + +Superclass: adx.control.JSONMapper + +```text +AzureResourceSku Azure resource SKU definition. + + AzureResourceSku Properties: + resourceType - Resource Namespace and Type. - type: string + sku - type: AzureSku + capacity - type: AzureCapacity +``` + +#### adx.control.models.AzureResourceSku.AzureResourceSku + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AzureResourceSku_1 + +Superclass: adx.control.JSONMapper + +```text +AzureResourceSku_1 Azure resource SKU definition. + + AzureResourceSku_1 Properties: + resourceType - Resource Namespace and Type. - type: string + sku - type: AzureSku + capacity - type: AzureCapacity +``` + +#### adx.control.models.AzureResourceSku_1.AzureResourceSku_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AzureSku + +Superclass: adx.control.JSONMapper + +```text +AzureSku Azure SKU definition. + + AzureSku Properties: + name - SKU name. - type: string + capacity - The number of instances of the cluster. - type: int32 + tier - SKU tier. - type: string +``` + +#### adx.control.models.AzureSku.AzureSku + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.AzureSkuNameEnum + +Superclass: adx.control.JSONEnum + +```text +AzureSkuNameEnum No description provided +``` + +```text +Enumeration values: + Dev_No_SLA_Standard_D11_v2 + Dev_No_SLA_Standard_E2a_v4 + Standard_D11_v2 + Standard_D12_v2 + Standard_D13_v2 + Standard_D14_v2 + Standard_D32d_v4 + Standard_D16d_v5 + Standard_D32d_v5 + Standard_DS13_v21TB_PS + Standard_DS13_v22TB_PS + Standard_DS14_v23TB_PS + Standard_DS14_v24TB_PS + Standard_L4s + Standard_L8s + Standard_L16s + Standard_L8s_v2 + Standard_L16s_v2 + Standard_L8s_v3 + Standard_L16s_v3 + Standard_L32s_v3 + Standard_L8as_v3 + Standard_L16as_v3 + Standard_L32as_v3 + Standard_E64i_v3 + Standard_E80ids_v4 + Standard_E2a_v4 + Standard_E4a_v4 + Standard_E8a_v4 + Standard_E16a_v4 + Standard_E8as_v41TB_PS + Standard_E8as_v42TB_PS + Standard_E16as_v43TB_PS + Standard_E16as_v44TB_PS + Standard_E8as_v51TB_PS + Standard_E8as_v52TB_PS + Standard_E16as_v53TB_PS + Standard_E16as_v54TB_PS + Standard_E2ads_v5 + Standard_E4ads_v5 + Standard_E8ads_v5 + Standard_E16ads_v5 + Standard_EC8as_v51TB_PS + Standard_EC8as_v52TB_PS + Standard_EC16as_v53TB_PS + Standard_EC16as_v54TB_PS + Standard_EC8ads_v5 + Standard_EC16ads_v5 + Standard_E8s_v41TB_PS + Standard_E8s_v42TB_PS + Standard_E16s_v43TB_PS + Standard_E16s_v44TB_PS + Standard_E8s_v51TB_PS + Standard_E8s_v52TB_PS + Standard_E16s_v53TB_PS + Standard_E16s_v54TB_PS + Standard_E2d_v4 + Standard_E4d_v4 + Standard_E8d_v4 + Standard_E16d_v4 + Standard_E2d_v5 + Standard_E4d_v5 + Standard_E8d_v5 + Standard_E16d_v5 + +``` + +#### adx.control.models.AzureSkuNameEnum.AzureSkuNameEnum + +```text +AzureSkuNameEnum No description provided +``` + +### adx.control.models.AzureSkuTierEnum + +Superclass: adx.control.JSONEnum + +```text +AzureSkuTierEnum No description provided +``` + +```text +Enumeration values: + Basic + Standard + +``` + +#### adx.control.models.AzureSkuTierEnum.AzureSkuTierEnum + +```text +AzureSkuTierEnum No description provided +``` + +### adx.control.models.BlobStorageEventType + +Superclass: adx.control.JSONEnum + +```text +BlobStorageEventType The name of blob storage event type to process. +``` + +```text +Enumeration values: + Microsoft_Storage_BlobCreated + Microsoft_Storage_BlobRenamed + +``` + +#### adx.control.models.BlobStorageEventType.BlobStorageEventType + +```text +BlobStorageEventType The name of blob storage event type to process. +``` + +### adx.control.models.CheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +CheckNameRequest The result returned from a database check name availability request. + + CheckNameRequest Properties: + name - Resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/databases. - type: string +``` + +#### adx.control.models.CheckNameRequest.CheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.CheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +CheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_databases + Microsoft_Kusto_clusters_attachedDatabaseConfigurations + +``` + +#### adx.control.models.CheckNameRequestTypeEnum.CheckNameRequestTypeEnum + +```text +CheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.CheckNameResult + +Superclass: adx.control.JSONMapper + +```text +CheckNameResult The result returned from a check name availability request. + + CheckNameResult Properties: + nameAvailable - Specifies a Boolean value that indicates if the name is available. - type: logical + name - The name that was checked. - type: string + message - Message indicating an unavailable name due to a conflict, or a description of the naming rules that are violated. - type: string + reason - Message providing the reason why the given name is invalid. - type: string +``` + +#### adx.control.models.CheckNameResult.CheckNameResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.CheckNameResultReasonEnum + +Superclass: adx.control.JSONEnum + +```text +CheckNameResultReasonEnum No description provided +``` + +```text +Enumeration values: + Invalid + AlreadyExists + +``` + +#### adx.control.models.CheckNameResultReasonEnum.CheckNameResultReasonEnum + +```text +CheckNameResultReasonEnum No description provided +``` + +### adx.control.models.Cluster + +Superclass: adx.control.JSONMapper + +```text +Cluster Class representing a Kusto cluster. + + Cluster Properties: + sku - type: AzureSku + systemData - type: systemData + zones - An array represents the availability zones of the cluster. - type: array of string + identity - type: Identity + xproperties - type: ClusterProperties_1 + etag - A unique read-only string that changes whenever the resource is updated. - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.Cluster.Cluster + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +ClusterCheckNameRequest The result returned from a cluster check name availability request. + + ClusterCheckNameRequest Properties: + name - Cluster name. - type: string + type - The type of resource, Microsoft.Kusto/clusters. - type: string +``` + +#### adx.control.models.ClusterCheckNameRequest.ClusterCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters + +``` + +#### adx.control.models.ClusterCheckNameRequestTypeEnum.ClusterCheckNameRequestTypeEnum + +```text +ClusterCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.ClusterListResult + +Superclass: adx.control.JSONMapper + +```text +ClusterListResult The list Kusto clusters operation response. + + ClusterListResult Properties: + value - The list of Kusto clusters. - type: array of Cluster +``` + +#### adx.control.models.ClusterListResult.ClusterListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterMigrateRequest + +Superclass: adx.control.JSONMapper + +```text +ClusterMigrateRequest A cluster migrate request. + + ClusterMigrateRequest Properties: + clusterResourceId - Resource ID of the destination cluster or kusto pool. - type: string +``` + +#### adx.control.models.ClusterMigrateRequest.ClusterMigrateRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalAssignment + +Superclass: adx.control.JSONMapper + +```text +ClusterPrincipalAssignment Class representing a cluster principal assignment. + + ClusterPrincipalAssignment Properties: + xproperties - type: ClusterPrincipalProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ClusterPrincipalAssignment.ClusterPrincipalAssignment + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalAssignmentCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +ClusterPrincipalAssignmentCheckNameRequest A principal assignment check name availability request. + + ClusterPrincipalAssignmentCheckNameRequest Properties: + name - Principal Assignment resource name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/principalAssignments. - type: string +``` + +#### adx.control.models.ClusterPrincipalAssignmentCheckNameRequest.ClusterPrincipalAssignmentCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_principalAssignments + +``` + +#### adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum.ClusterPrincipalAssignmentCheckNameRequestTypeEnum + +```text +ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.ClusterPrincipalAssignmentListResult + +Superclass: adx.control.JSONMapper + +```text +ClusterPrincipalAssignmentListResult The list Kusto cluster principal assignments operation response. + + ClusterPrincipalAssignmentListResult Properties: + value - The list of Kusto cluster principal assignments. - type: array of ClusterPrincipalAssignment +``` + +#### adx.control.models.ClusterPrincipalAssignmentListResult.ClusterPrincipalAssignmentListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalProperties + +Superclass: adx.control.JSONMapper + +```text +ClusterPrincipalProperties A class representing cluster principal property. + + ClusterPrincipalProperties Properties: + principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + role - Cluster principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string +``` + +#### adx.control.models.ClusterPrincipalProperties.ClusterPrincipalProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPrincipalPropertiesPrincipalTypeEnum No description provided +``` + +```text +Enumeration values: + App + Group + User + +``` + +#### adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum.ClusterPrincipalPropertiesPrincipalTypeEnum + +```text +ClusterPrincipalPropertiesPrincipalTypeEnum No description provided +``` + +### adx.control.models.ClusterPrincipalPropertiesRoleEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPrincipalPropertiesRoleEnum No description provided +``` + +```text +Enumeration values: + AllDatabasesAdmin + AllDatabasesViewer + +``` + +#### adx.control.models.ClusterPrincipalPropertiesRoleEnum.ClusterPrincipalPropertiesRoleEnum + +```text +ClusterPrincipalPropertiesRoleEnum No description provided +``` + +### adx.control.models.ClusterPrincipalProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ClusterPrincipalProperties_1 A class representing cluster principal property. + + ClusterPrincipalProperties_1 Properties: + principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + role - Cluster principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string +``` + +#### adx.control.models.ClusterPrincipalProperties_1.ClusterPrincipalProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPrincipalProperties_1PrincipalTypeEnum No description provided +``` + +```text +Enumeration values: + App + Group + User + +``` + +#### adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum.ClusterPrincipalProperties_1PrincipalTypeEnum + +```text +ClusterPrincipalProperties_1PrincipalTypeEnum No description provided +``` + +### adx.control.models.ClusterPrincipalProperties_1RoleEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPrincipalProperties_1RoleEnum No description provided +``` + +```text +Enumeration values: + AllDatabasesAdmin + AllDatabasesViewer + +``` + +#### adx.control.models.ClusterPrincipalProperties_1RoleEnum.ClusterPrincipalProperties_1RoleEnum + +```text +ClusterPrincipalProperties_1RoleEnum No description provided +``` + +### adx.control.models.ClusterProperties + +Superclass: adx.control.JSONMapper + +```text +ClusterProperties Class representing the Kusto cluster properties. + + ClusterProperties Properties: + state - The state of the resource. - type: string + provisioningState - type: ProvisioningState + uri - The cluster URI. - type: string + dataIngestionUri - The cluster data ingestion URI. - type: string + stateReason - The reason for the cluster''s current state. - type: string + trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + optimizedAutoscale - type: OptimizedAutoscale + enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + virtualNetworkConfiguration - type: VirtualNetworkConfiguration + keyVaultProperties - type: KeyVaultProperties + enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + languageExtensions - type: LanguageExtensionsList + enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + engineType - The engine type - type: string + acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + migrationCluster - type: MigrationClusterProperties +``` + +#### adx.control.models.ClusterProperties.ClusterProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterPropertiesEngineTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPropertiesEngineTypeEnum No description provided +``` + +```text +Enumeration values: + V2 + V3 + +``` + +#### adx.control.models.ClusterPropertiesEngineTypeEnum.ClusterPropertiesEngineTypeEnum + +```text +ClusterPropertiesEngineTypeEnum No description provided +``` + +### adx.control.models.ClusterPropertiesPublicIPTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPropertiesPublicIPTypeEnum No description provided +``` + +```text +Enumeration values: + IPv4 + DualStack + +``` + +#### adx.control.models.ClusterPropertiesPublicIPTypeEnum.ClusterPropertiesPublicIPTypeEnum + +```text +ClusterPropertiesPublicIPTypeEnum No description provided +``` + +### adx.control.models.ClusterPropertiesPublicNetworkAccessEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPropertiesPublicNetworkAccessEnum No description provided +``` + +```text +Enumeration values: + Enabled + Disabled + +``` + +#### adx.control.models.ClusterPropertiesPublicNetworkAccessEnum.ClusterPropertiesPublicNetworkAccessEnum + +```text +ClusterPropertiesPublicNetworkAccessEnum No description provided +``` + +### adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided +``` + +```text +Enumeration values: + Enabled + Disabled + +``` + +#### adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum.ClusterPropertiesRestrictOutboundNetworkAccessEnum + +```text +ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided +``` + +### adx.control.models.ClusterPropertiesStateEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterPropertiesStateEnum No description provided +``` + +```text +Enumeration values: + Creating + Unavailable + Running + Deleting + Deleted + Stopping + Stopped + Starting + Updating + Migrated + +``` + +#### adx.control.models.ClusterPropertiesStateEnum.ClusterPropertiesStateEnum + +```text +ClusterPropertiesStateEnum No description provided +``` + +### adx.control.models.ClusterProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ClusterProperties_1 Class representing the Kusto cluster properties. + + ClusterProperties_1 Properties: + state - The state of the resource. - type: string + provisioningState - type: ProvisioningState + uri - The cluster URI. - type: string + dataIngestionUri - The cluster data ingestion URI. - type: string + stateReason - The reason for the cluster''s current state. - type: string + trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + optimizedAutoscale - type: OptimizedAutoscale + enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + virtualNetworkConfiguration - type: VirtualNetworkConfiguration + keyVaultProperties - type: KeyVaultProperties + enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + languageExtensions - type: LanguageExtensionsList + enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + engineType - The engine type - type: string + acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + migrationCluster - type: MigrationClusterProperties +``` + +#### adx.control.models.ClusterProperties_1.ClusterProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ClusterProperties_1EngineTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterProperties_1EngineTypeEnum No description provided +``` + +```text +Enumeration values: + V2 + V3 + +``` + +#### adx.control.models.ClusterProperties_1EngineTypeEnum.ClusterProperties_1EngineTypeEnum + +```text +ClusterProperties_1EngineTypeEnum No description provided +``` + +### adx.control.models.ClusterProperties_1PublicIPTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterProperties_1PublicIPTypeEnum No description provided +``` + +```text +Enumeration values: + IPv4 + DualStack + +``` + +#### adx.control.models.ClusterProperties_1PublicIPTypeEnum.ClusterProperties_1PublicIPTypeEnum + +```text +ClusterProperties_1PublicIPTypeEnum No description provided +``` + +### adx.control.models.ClusterProperties_1PublicNetworkAccessEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterProperties_1PublicNetworkAccessEnum No description provided +``` + +```text +Enumeration values: + Enabled + Disabled + +``` + +#### adx.control.models.ClusterProperties_1PublicNetworkAccessEnum.ClusterProperties_1PublicNetworkAccessEnum + +```text +ClusterProperties_1PublicNetworkAccessEnum No description provided +``` + +### adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided +``` + +```text +Enumeration values: + Enabled + Disabled + +``` + +#### adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum.ClusterProperties_1RestrictOutboundNetworkAccessEnum + +```text +ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided +``` + +### adx.control.models.ClusterProperties_1StateEnum + +Superclass: adx.control.JSONEnum + +```text +ClusterProperties_1StateEnum No description provided +``` + +```text +Enumeration values: + Creating + Unavailable + Running + Deleting + Deleted + Stopping + Stopped + Starting + Updating + Migrated + +``` + +#### adx.control.models.ClusterProperties_1StateEnum.ClusterProperties_1StateEnum + +```text +ClusterProperties_1StateEnum No description provided +``` + +### adx.control.models.ClusterUpdate + +Superclass: adx.control.JSONMapper + +```text +ClusterUpdate Class representing an update to a Kusto cluster. + + ClusterUpdate Properties: + tags - Resource tags. - type: adx.control.JSONMapperMap + location - Resource location. - type: string + sku - type: AzureSku + identity - type: Identity + xproperties - type: ClusterProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ClusterUpdate.ClusterUpdate + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.Compression + +Superclass: adx.control.JSONEnum + +```text +Compression The compression type +``` + +```text +Enumeration values: + None + GZip + +``` + +#### adx.control.models.Compression.Compression + +```text +Compression The compression type +``` + +### adx.control.models.CosmosDbDataConnection + +Superclass: adx.control.JSONMapper + +```text +CosmosDbDataConnection Class representing a CosmosDb data connection. + + CosmosDbDataConnection Properties: + xproperties - type: CosmosDbDataConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.CosmosDbDataConnection.CosmosDbDataConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.CosmosDbDataConnectionProperties + +Superclass: adx.control.JSONMapper + +```text +CosmosDbDataConnectionProperties Class representing the Kusto CosmosDb data connection properties. + + CosmosDbDataConnectionProperties Properties: + tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityObjectId - The object ID of the managed identity resource. - type: string + cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.CosmosDbDataConnectionProperties.CosmosDbDataConnectionProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.CosmosDbDataConnectionProperties_1 + +Superclass: adx.control.JSONMapper + +```text +CosmosDbDataConnectionProperties_1 Class representing the Kusto CosmosDb data connection properties. + + CosmosDbDataConnectionProperties_1 Properties: + tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityObjectId - The object ID of the managed identity resource. - type: string + cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.CosmosDbDataConnectionProperties_1.CosmosDbDataConnectionProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnection + +Superclass: adx.control.JSONMapper + +```text +DataConnection Class representing an data connection. + + DataConnection Properties: + location - Resource location. - type: string + kind - Kind of the endpoint for the data connection - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.DataConnection.DataConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnectionCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +DataConnectionCheckNameRequest A data connection check name availability request. + + DataConnectionCheckNameRequest Properties: + name - Data Connection name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/dataConnections. - type: string +``` + +#### adx.control.models.DataConnectionCheckNameRequest.DataConnectionCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnectionCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +DataConnectionCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_dataConnections + +``` + +#### adx.control.models.DataConnectionCheckNameRequestTypeEnum.DataConnectionCheckNameRequestTypeEnum + +```text +DataConnectionCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.DataConnectionKindEnum + +Superclass: adx.control.JSONEnum + +```text +DataConnectionKindEnum No description provided +``` + +```text +Enumeration values: + EventHub + EventGrid + IotHub + CosmosDb + +``` + +#### adx.control.models.DataConnectionKindEnum.DataConnectionKindEnum + +```text +DataConnectionKindEnum No description provided +``` + +### adx.control.models.DataConnectionListResult + +Superclass: adx.control.JSONMapper + +```text +DataConnectionListResult The list Kusto data connections operation response. + + DataConnectionListResult Properties: + value - The list of Kusto data connections. - type: array of DataConnection +``` + +#### adx.control.models.DataConnectionListResult.DataConnectionListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnectionValidation + +Superclass: adx.control.JSONMapper + +```text +DataConnectionValidation Class representing an data connection validation. + + DataConnectionValidation Properties: + dataConnectionName - The name of the data connection. - type: string + xproperties - type: DataConnection +``` + +#### adx.control.models.DataConnectionValidation.DataConnectionValidation + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnectionValidationListResult + +Superclass: adx.control.JSONMapper + +```text +DataConnectionValidationListResult The list Kusto data connection validation result. + + DataConnectionValidationListResult Properties: + value - The list of Kusto data connection validation errors. - type: array of DataConnectionValidationResult +``` + +#### adx.control.models.DataConnectionValidationListResult.DataConnectionValidationListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DataConnectionValidationResult + +Superclass: adx.control.JSONMapper + +```text +DataConnectionValidationResult The result returned from a data connection validation request. + + DataConnectionValidationResult Properties: + errorMessage - A message which indicates a problem in data connection validation. - type: string +``` + +#### adx.control.models.DataConnectionValidationResult.DataConnectionValidationResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.Database + +Superclass: adx.control.JSONMapper + +```text +Database Class representing a Kusto database. + + Database Properties: + location - Resource location. - type: string + kind - Kind of the database - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.Database.Database + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabaseInviteFollowerRequest + +Superclass: adx.control.JSONMapper + +```text +DatabaseInviteFollowerRequest The request to invite a follower to a database. + + DatabaseInviteFollowerRequest Properties: + inviteeEmail - The email of the invited user for which the follower invitation is generated. - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties +``` + +#### adx.control.models.DatabaseInviteFollowerRequest.DatabaseInviteFollowerRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabaseInviteFollowerResult + +Superclass: adx.control.JSONMapper + +```text +DatabaseInviteFollowerResult The result returned from a follower invitation generation request. + + DatabaseInviteFollowerResult Properties: + generatedInvitation - The generated invitation token. - type: string +``` + +#### adx.control.models.DatabaseInviteFollowerResult.DatabaseInviteFollowerResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabaseKindEnum + +Superclass: adx.control.JSONEnum + +```text +DatabaseKindEnum No description provided +``` + +```text +Enumeration values: + ReadWrite + ReadOnlyFollowing + +``` + +#### adx.control.models.DatabaseKindEnum.DatabaseKindEnum + +```text +DatabaseKindEnum No description provided +``` + +### adx.control.models.DatabaseListResult + +Superclass: adx.control.JSONMapper + +```text +DatabaseListResult The list Kusto databases operation response. + + DatabaseListResult Properties: + nextLink - Link to the next page of results - type: string + value - The list of Kusto databases. - type: array of Database +``` + +#### adx.control.models.DatabaseListResult.DatabaseListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipal + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipal A class representing database principal entity. + + DatabasePrincipal Properties: + role - Database principal role. - type: string + name - Database principal name. - type: string + type - Database principal type. - type: string + fqn - Database principal fully qualified name. - type: string + email - Database principal email if exists. - type: string + appId - Application id - relevant only for application principal type. - type: string + tenantName - The tenant name of the principal - type: string +``` + +#### adx.control.models.DatabasePrincipal.DatabasePrincipal + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalAssignment + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalAssignment Class representing a database principal assignment. + + DatabasePrincipalAssignment Properties: + xproperties - type: DatabasePrincipalProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.DatabasePrincipalAssignment.DatabasePrincipalAssignment + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalAssignmentCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalAssignmentCheckNameRequest A principal assignment check name availability request. + + DatabasePrincipalAssignmentCheckNameRequest Properties: + name - Principal Assignment resource name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/principalAssignments. - type: string +``` + +#### adx.control.models.DatabasePrincipalAssignmentCheckNameRequest.DatabasePrincipalAssignmentCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_principalAssignments + +``` + +#### adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum.DatabasePrincipalAssignmentCheckNameRequestTypeEnum + +```text +DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.DatabasePrincipalAssignmentListResult + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalAssignmentListResult The list Kusto database principal assignments operation response. + + DatabasePrincipalAssignmentListResult Properties: + value - The list of Kusto database principal assignments. - type: array of DatabasePrincipalAssignment +``` + +#### adx.control.models.DatabasePrincipalAssignmentListResult.DatabasePrincipalAssignmentListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalListRequest + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalListRequest The list Kusto database principals operation request. + + DatabasePrincipalListRequest Properties: + value - The list of Kusto database principals. - type: array of DatabasePrincipal +``` + +#### adx.control.models.DatabasePrincipalListRequest.DatabasePrincipalListRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalListResult + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalListResult The list Kusto database principals operation response. + + DatabasePrincipalListResult Properties: + value - The list of Kusto database principals. - type: array of DatabasePrincipal +``` + +#### adx.control.models.DatabasePrincipalListResult.DatabasePrincipalListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalProperties + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalProperties A class representing database principal property. + + DatabasePrincipalProperties Properties: + principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + role - Database principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string +``` + +#### adx.control.models.DatabasePrincipalProperties.DatabasePrincipalProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalPropertiesPrincipalTypeEnum No description provided +``` + +```text +Enumeration values: + App + Group + User + +``` + +#### adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum.DatabasePrincipalPropertiesPrincipalTypeEnum + +```text +DatabasePrincipalPropertiesPrincipalTypeEnum No description provided +``` + +### adx.control.models.DatabasePrincipalPropertiesRoleEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalPropertiesRoleEnum No description provided +``` + +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer + +``` + +#### adx.control.models.DatabasePrincipalPropertiesRoleEnum.DatabasePrincipalPropertiesRoleEnum + +```text +DatabasePrincipalPropertiesRoleEnum No description provided +``` + +### adx.control.models.DatabasePrincipalProperties_1 + +Superclass: adx.control.JSONMapper + +```text +DatabasePrincipalProperties_1 A class representing database principal property. + + DatabasePrincipalProperties_1 Properties: + principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + role - Database principal role. - type: string + tenantId - The tenant id of the principal - type: string + principalType - Principal type. - type: string + tenantName - The tenant name of the principal - type: string + principalName - The principal name - type: string + provisioningState - type: ProvisioningState + aadObjectId - The service principal object id in AAD (Azure active directory) - type: string +``` + +#### adx.control.models.DatabasePrincipalProperties_1.DatabasePrincipalProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalProperties_1PrincipalTypeEnum No description provided +``` + +```text +Enumeration values: + App + Group + User + +``` + +#### adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum.DatabasePrincipalProperties_1PrincipalTypeEnum + +```text +DatabasePrincipalProperties_1PrincipalTypeEnum No description provided +``` + +### adx.control.models.DatabasePrincipalProperties_1RoleEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalProperties_1RoleEnum No description provided +``` + +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer + +``` + +#### adx.control.models.DatabasePrincipalProperties_1RoleEnum.DatabasePrincipalProperties_1RoleEnum + +```text +DatabasePrincipalProperties_1RoleEnum No description provided +``` + +### adx.control.models.DatabasePrincipalRoleEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalRoleEnum No description provided +``` + +```text +Enumeration values: + Admin + Ingestor + Monitor + User + UnrestrictedViewer + Viewer + +``` + +#### adx.control.models.DatabasePrincipalRoleEnum.DatabasePrincipalRoleEnum + +```text +DatabasePrincipalRoleEnum No description provided +``` + +### adx.control.models.DatabasePrincipalTypeEnum + +Superclass: adx.control.JSONEnum + +```text +DatabasePrincipalTypeEnum No description provided +``` + +```text +Enumeration values: + App + Group + User + +``` + +#### adx.control.models.DatabasePrincipalTypeEnum.DatabasePrincipalTypeEnum + +```text +DatabasePrincipalTypeEnum No description provided +``` + +### adx.control.models.DatabaseShareOrigin + +Superclass: adx.control.JSONEnum + +```text +DatabaseShareOrigin The origin of the following setup. +``` + +```text +Enumeration values: + Direct + DataShare + Other + +``` + +#### adx.control.models.DatabaseShareOrigin.DatabaseShareOrigin + +```text +DatabaseShareOrigin The origin of the following setup. +``` + +### adx.control.models.DatabaseStatistics + +Superclass: adx.control.JSONMapper + +```text +DatabaseStatistics A class that contains database statistics information. + + DatabaseStatistics Properties: + size - The database size - the total size of compressed data and index in bytes. - type: double +``` + +#### adx.control.models.DatabaseStatistics.DatabaseStatistics + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.DiagnoseVirtualNetworkResult + +Superclass: adx.control.JSONMapper + +```text +DiagnoseVirtualNetworkResult No description provided + + DiagnoseVirtualNetworkResult Properties: + findings - The list of network connectivity diagnostic finding - type: array of string +``` + +#### adx.control.models.DiagnoseVirtualNetworkResult.DiagnoseVirtualNetworkResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EndpointDependency + +Superclass: adx.control.JSONMapper + +```text +EndpointDependency A domain name that a service is reached at, including details of the current connection status. + + EndpointDependency Properties: + domainName - The domain name of the dependency. - type: string + endpointDetails - The ports used when connecting to DomainName. - type: array of EndpointDetail +``` + +#### adx.control.models.EndpointDependency.EndpointDependency + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EndpointDetail + +Superclass: adx.control.JSONMapper + +```text +EndpointDetail Current TCP connectivity information from the Kusto cluster to a single endpoint. + + EndpointDetail Properties: + port - The port an endpoint is connected to. - type: int32 +``` + +#### adx.control.models.EndpointDetail.EndpointDetail + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ErrorAdditionalInfo + +Superclass: adx.control.JSONMapper + +```text +ErrorAdditionalInfo The resource management error additional info. + + ErrorAdditionalInfo Properties: + type - The additional info type. - type: string + info - The additional info. - type: object +``` + +#### adx.control.models.ErrorAdditionalInfo.ErrorAdditionalInfo + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +#### adx.control.models.ErrorAdditionalInfo.disp + +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. + + If X is a string or character array, the text is displayed. + + See also formattedDisplayText, sprintf, num2str, format, details. +``` + +### adx.control.models.ErrorDetail + +Superclass: adx.control.JSONMapper + +```text +ErrorDetail The error detail. + + ErrorDetail Properties: + code - The error code. - type: string + message - The error message. - type: string + target - The error target. - type: string + details - The error details. - type: array of ErrorDetail + additionalInfo - The error additional info. - type: array of ErrorAdditionalInfo +``` + +#### adx.control.models.ErrorDetail.ErrorDetail + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +#### adx.control.models.ErrorDetail.disp + +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. + + If X is a string or character array, the text is displayed. + + See also formattedDisplayText, sprintf, num2str, format, details. +``` + +### adx.control.models.ErrorResponse + +Superclass: adx.control.JSONMapper + +```text +ErrorResponse Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.). + + ErrorResponse Properties: + error - type: ErrorDetail +``` + +#### adx.control.models.ErrorResponse.ErrorResponse + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +#### adx.control.models.ErrorResponse.disp + +```text +DISP Display array. + DISP(X) displays array X without printing the array name or + additional description information such as the size and class name. + In all other ways it is the same as leaving the semicolon off an + expression except that nothing is shown for empty arrays. + + If X is a string or character array, the text is displayed. + + See also formattedDisplayText, sprintf, num2str, format, details. +``` + +### adx.control.models.EventGridConnectionProperties + +Superclass: adx.control.JSONMapper + +```text +EventGridConnectionProperties Class representing the Kusto event grid connection properties. + + EventGridConnectionProperties Properties: + storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventGridDataFormat + ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + blobStorageEventType - type: BlobStorageEventType + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.EventGridConnectionProperties.EventGridConnectionProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +EventGridConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum.EventGridConnectionPropertiesDatabaseRoutingEnum + +```text +EventGridConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +### adx.control.models.EventGridConnectionProperties_1 + +Superclass: adx.control.JSONMapper + +```text +EventGridConnectionProperties_1 Class representing the Kusto event grid connection properties. + + EventGridConnectionProperties_1 Properties: + storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventGridDataFormat + ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + blobStorageEventType - type: BlobStorageEventType + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.EventGridConnectionProperties_1.EventGridConnectionProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +EventGridConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum.EventGridConnectionProperties_1DatabaseRoutingEnum + +```text +EventGridConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +### adx.control.models.EventGridDataConnection + +Superclass: adx.control.JSONMapper + +```text +EventGridDataConnection Class representing an Event Grid data connection. + + EventGridDataConnection Properties: + xproperties - type: EventGridConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.EventGridDataConnection.EventGridDataConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventGridDataFormat + +Superclass: adx.control.JSONEnum + +```text +EventGridDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE + +``` + +#### adx.control.models.EventGridDataFormat.EventGridDataFormat + +```text +EventGridDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +### adx.control.models.EventHubConnectionProperties + +Superclass: adx.control.JSONMapper + +```text +EventHubConnectionProperties Class representing the Kusto event hub connection properties. + + EventHubConnectionProperties Properties: + eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventHubDataFormat + eventSystemProperties - System properties of the event hub - type: array of string + compression - type: Compression + provisioningState - type: ProvisioningState + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime +``` + +#### adx.control.models.EventHubConnectionProperties.EventHubConnectionProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +EventHubConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum.EventHubConnectionPropertiesDatabaseRoutingEnum + +```text +EventHubConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +### adx.control.models.EventHubConnectionProperties_1 + +Superclass: adx.control.JSONMapper + +```text +EventHubConnectionProperties_1 Class representing the Kusto event hub connection properties. + + EventHubConnectionProperties_1 Properties: + eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + consumerGroup - The event hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: EventHubDataFormat + eventSystemProperties - System properties of the event hub - type: array of string + compression - type: Compression + provisioningState - type: ProvisioningState + managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime +``` + +#### adx.control.models.EventHubConnectionProperties_1.EventHubConnectionProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +EventHubConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum.EventHubConnectionProperties_1DatabaseRoutingEnum + +```text +EventHubConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +### adx.control.models.EventHubDataConnection + +Superclass: adx.control.JSONMapper + +```text +EventHubDataConnection Class representing an event hub data connection. + + EventHubDataConnection Properties: + xproperties - type: EventHubConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.EventHubDataConnection.EventHubDataConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.EventHubDataFormat + +Superclass: adx.control.JSONEnum + +```text +EventHubDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE + +``` + +#### adx.control.models.EventHubDataFormat.EventHubDataFormat + +```text +EventHubDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +### adx.control.models.FollowerDatabaseDefinition + +Superclass: adx.control.JSONMapper + +```text +FollowerDatabaseDefinition A class representing follower database request. + + FollowerDatabaseDefinition Properties: + clusterResourceId - Resource id of the cluster that follows a database owned by this cluster. - type: string + attachedDatabaseConfigurationName - Resource name of the attached database configuration in the follower cluster. - type: string + databaseName - The database name owned by this cluster that was followed. * in case following all databases. - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + databaseShareOrigin - type: DatabaseShareOrigin +``` + +#### adx.control.models.FollowerDatabaseDefinition.FollowerDatabaseDefinition + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.FollowerDatabaseListResult + +Superclass: adx.control.JSONMapper + +```text +FollowerDatabaseListResult The list Kusto database principals operation response. + + FollowerDatabaseListResult Properties: + value - The list of follower database result. - type: array of FollowerDatabaseDefinition +``` + +#### adx.control.models.FollowerDatabaseListResult.FollowerDatabaseListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.FreeFormObject + +Superclass: dynamicprops + +```text +Class methods +``` + +#### adx.control.models.FreeFormObject.FreeFormObject + +```text +Class methods +``` + +### adx.control.models.Identity + +Superclass: adx.control.JSONMapper + +```text +Identity Identity for the resource. + + Identity Properties: + principalId - The principal ID of resource identity. - type: string + tenantId - The tenant ID of resource. - type: string + type - The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove all identities. - type: string + userAssignedIdentities - The list of user identities associated with the Kusto cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''. - type: adx.control.JSONMapperMap +``` + +#### adx.control.models.Identity.Identity + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.IdentityTypeEnum + +Superclass: adx.control.JSONEnum + +```text +IdentityTypeEnum No description provided +``` + +```text +Enumeration values: + None + SystemAssigned + UserAssigned + SystemAssigned_UserAssigned + +``` + +#### adx.control.models.IdentityTypeEnum.IdentityTypeEnum + +```text +IdentityTypeEnum No description provided +``` + +### adx.control.models.Identity_userAssignedIdentities_value + +Superclass: adx.control.JSONMapper + +```text +Identity_userAssignedIdentities_value No description provided + + Identity_userAssignedIdentities_value Properties: + principalId - The principal id of user assigned identity. - type: string + clientId - The client id of user assigned identity. - type: string +``` + +#### adx.control.models.Identity_userAssignedIdentities_value.Identity_userAssignedIdentities_value + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.IotHubConnectionProperties + +Superclass: adx.control.JSONMapper + +```text +IotHubConnectionProperties Class representing the Kusto Iot hub connection properties. + + IotHubConnectionProperties Properties: + iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + consumerGroup - The iot hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: IotHubDataFormat + eventSystemProperties - System properties of the iot hub - type: array of string + sharedAccessPolicyName - The name of the share access policy - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.IotHubConnectionProperties.IotHubConnectionProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +IotHubConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum.IotHubConnectionPropertiesDatabaseRoutingEnum + +```text +IotHubConnectionPropertiesDatabaseRoutingEnum No description provided +``` + +### adx.control.models.IotHubConnectionProperties_1 + +Superclass: adx.control.JSONMapper + +```text +IotHubConnectionProperties_1 Class representing the Kusto Iot hub connection properties. + + IotHubConnectionProperties_1 Properties: + iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + consumerGroup - The iot hub consumer group. - type: string + tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + dataFormat - type: IotHubDataFormat + eventSystemProperties - System properties of the iot hub - type: array of string + sharedAccessPolicyName - The name of the share access policy - type: string + databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.IotHubConnectionProperties_1.IotHubConnectionProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum + +Superclass: adx.control.JSONEnum + +```text +IotHubConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +```text +Enumeration values: + Single + Multi + +``` + +#### adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum.IotHubConnectionProperties_1DatabaseRoutingEnum + +```text +IotHubConnectionProperties_1DatabaseRoutingEnum No description provided +``` + +### adx.control.models.IotHubDataConnection + +Superclass: adx.control.JSONMapper + +```text +IotHubDataConnection Class representing an iot hub data connection. + + IotHubDataConnection Properties: + xproperties - type: IotHubConnectionProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.IotHubDataConnection.IotHubDataConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.IotHubDataFormat + +Superclass: adx.control.JSONEnum + +```text +IotHubDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +```text +Enumeration values: + MULTIJSON + JSON + CSV + TSV + SCSV + SOHSV + PSV + TXT + RAW + SINGLEJSON + AVRO + TSVE + PARQUET + ORC + APACHEAVRO + W3CLOGFILE + +``` + +#### adx.control.models.IotHubDataFormat.IotHubDataFormat + +```text +IotHubDataFormat The data format of the message. Optionally the data format can be added to each message. +``` + +### adx.control.models.KeyVaultProperties + +Superclass: adx.control.JSONMapper + +```text +KeyVaultProperties Properties of the key vault. + + KeyVaultProperties Properties: + keyName - The name of the key vault key. - type: string + keyVersion - The version of the key vault key. - type: string + keyVaultUri - The Uri of the key vault. - type: string + userIdentity - The user assigned identity (ARM resource id) that has access to the key. - type: string +``` + +#### adx.control.models.KeyVaultProperties.KeyVaultProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.LanguageExtension + +Superclass: adx.control.JSONMapper + +```text +LanguageExtension The language extension object. + + LanguageExtension Properties: + languageExtensionName - type: LanguageExtensionName + languageExtensionImageName - type: LanguageExtensionImageName +``` + +#### adx.control.models.LanguageExtension.LanguageExtension + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.LanguageExtensionImageName + +Superclass: adx.control.JSONEnum + +```text +LanguageExtensionImageName Language extension image name. +``` + +```text +Enumeration values: + R + Python3_6_5 + Python3_10_8 + +``` + +#### adx.control.models.LanguageExtensionImageName.LanguageExtensionImageName + +```text +LanguageExtensionImageName Language extension image name. +``` + +### adx.control.models.LanguageExtensionName + +Superclass: adx.control.JSONEnum + +```text +LanguageExtensionName Language extension that can run within KQL query. +``` + +```text +Enumeration values: + PYTHON + R + +``` + +#### adx.control.models.LanguageExtensionName.LanguageExtensionName + +```text +LanguageExtensionName Language extension that can run within KQL query. +``` + +### adx.control.models.LanguageExtension_1 + +Superclass: adx.control.JSONMapper + +```text +LanguageExtension_1 The language extension object. + + LanguageExtension_1 Properties: + languageExtensionName - type: LanguageExtensionName + languageExtensionImageName - type: LanguageExtensionImageName +``` + +#### adx.control.models.LanguageExtension_1.LanguageExtension_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.LanguageExtensionsList + +Superclass: adx.control.JSONMapper + +```text +LanguageExtensionsList The list of language extension objects. + + LanguageExtensionsList Properties: + value - The list of language extensions. - type: array of LanguageExtension_1 +``` + +#### adx.control.models.LanguageExtensionsList.LanguageExtensionsList + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ListResourceSkusResult + +Superclass: adx.control.JSONMapper + +```text +ListResourceSkusResult List of available SKUs for a Kusto Cluster. + + ListResourceSkusResult Properties: + value - The collection of available SKUs for an existing resource. - type: array of AzureResourceSku_1 +``` + +#### adx.control.models.ListResourceSkusResult.ListResourceSkusResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpoint + +Superclass: adx.control.JSONMapper + +```text +ManagedPrivateEndpoint Class representing a managed private endpoint. + + ManagedPrivateEndpoint Properties: + xproperties - type: ManagedPrivateEndpointProperties_1 + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ManagedPrivateEndpoint.ManagedPrivateEndpoint + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpointListResult + +Superclass: adx.control.JSONMapper + +```text +ManagedPrivateEndpointListResult The list managed private endpoints operation response. + + ManagedPrivateEndpointListResult Properties: + value - The list of managed private endpoints. - type: array of ManagedPrivateEndpoint +``` + +#### adx.control.models.ManagedPrivateEndpointListResult.ManagedPrivateEndpointListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpointProperties + +Superclass: adx.control.JSONMapper + +```text +ManagedPrivateEndpointProperties A class representing the properties of a managed private endpoint object. + + ManagedPrivateEndpointProperties Properties: + privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + groupId - The groupId in which the managed private endpoint is created. - type: string + requestMessage - The user request message. - type: string + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.ManagedPrivateEndpointProperties.ManagedPrivateEndpointProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpointProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ManagedPrivateEndpointProperties_1 A class representing the properties of a managed private endpoint object. + + ManagedPrivateEndpointProperties_1 Properties: + privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + groupId - The groupId in which the managed private endpoint is created. - type: string + requestMessage - The user request message. - type: string + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.ManagedPrivateEndpointProperties_1.ManagedPrivateEndpointProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpointsCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +ManagedPrivateEndpointsCheckNameRequest The result returned from a managedPrivateEndpoints check name availability request. + + ManagedPrivateEndpointsCheckNameRequest Properties: + name - Managed private endpoint resource name. - type: string + type - The type of resource, for instance Microsoft.Kusto/clusters/managedPrivateEndpoints. - type: string +``` + +#### adx.control.models.ManagedPrivateEndpointsCheckNameRequest.ManagedPrivateEndpointsCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_managedPrivateEndpoints + +``` + +#### adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum.ManagedPrivateEndpointsCheckNameRequestTypeEnum + +```text +ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.MigrationClusterProperties + +Superclass: adx.control.JSONMapper + +```text +MigrationClusterProperties Represents a properties of a cluster that is part of a migration. + + MigrationClusterProperties Properties: + id - The resource ID of the cluster. - type: string + uri - The public URL of the cluster. - type: string + dataIngestionUri - The public data ingestion URL of the cluster. - type: string + role - The role of the cluster in the migration process. - type: string +``` + +#### adx.control.models.MigrationClusterProperties.MigrationClusterProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.MigrationClusterPropertiesRoleEnum + +Superclass: adx.control.JSONEnum + +```text +MigrationClusterPropertiesRoleEnum No description provided +``` + +```text +Enumeration values: + Source + Destination + +``` + +#### adx.control.models.MigrationClusterPropertiesRoleEnum.MigrationClusterPropertiesRoleEnum + +```text +MigrationClusterPropertiesRoleEnum No description provided +``` + +### adx.control.models.Operation + +Superclass: adx.control.JSONMapper + +```text +Operation No description provided + + Operation Properties: + name - This is of the format {provider}/{resource}/{operation}. - type: string + display - type: The_object_that_describes_the_operation_ + origin - type: string + xproperties - type: object +``` + +#### adx.control.models.Operation.Operation + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OperationListResult + +Superclass: adx.control.JSONMapper + +```text +OperationListResult No description provided + + OperationListResult Properties: + value - type: array of Operation + nextLink - type: string +``` + +#### adx.control.models.OperationListResult.OperationListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OperationResult + +Superclass: adx.control.JSONMapper + +```text +OperationResult Operation Result Entity. + + OperationResult Properties: + id - ID of the resource. - type: string + name - Name of the resource. - type: string + status - type: Status + startTime - The operation start time - type: datetime + endTime - The operation end time - type: datetime + percentComplete - Percentage completed. - type: double + xproperties - type: OperationResultProperties + error - type: OperationResultErrorProperties +``` + +#### adx.control.models.OperationResult.OperationResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OperationResultErrorProperties + +Superclass: adx.control.JSONMapper + +```text +OperationResultErrorProperties Operation result error properties + + OperationResultErrorProperties Properties: + code - The code of the error. - type: string + message - The error message. - type: string +``` + +#### adx.control.models.OperationResultErrorProperties.OperationResultErrorProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OperationResultProperties + +Superclass: adx.control.JSONMapper + +```text +OperationResultProperties Operation result properties + + OperationResultProperties Properties: + operationKind - The kind of the operation. - type: string + provisioningState - type: ProvisioningState + operationState - The state of the operation. - type: string +``` + +#### adx.control.models.OperationResultProperties.OperationResultProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OptimizedAutoscale + +Superclass: adx.control.JSONMapper + +```text +OptimizedAutoscale A class that contains the optimized auto scale definition. + + OptimizedAutoscale Properties: + version - The version of the template defined, for instance 1. - type: int32 + isEnabled - A boolean value that indicate if the optimized autoscale feature is enabled or not. - type: logical + minimum - Minimum allowed instances count. - type: int32 + maximum - Maximum allowed instances count. - type: int32 +``` + +#### adx.control.models.OptimizedAutoscale.OptimizedAutoscale + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OutboundNetworkDependenciesEndpoint + +Superclass: adx.control.JSONMapper + +```text +OutboundNetworkDependenciesEndpoint Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. + + OutboundNetworkDependenciesEndpoint Properties: + xproperties - type: OutboundNetworkDependenciesEndpointProperties + etag - A unique read-only string that changes whenever the resource is updated. - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.OutboundNetworkDependenciesEndpoint.OutboundNetworkDependenciesEndpoint + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OutboundNetworkDependenciesEndpointListResult + +Superclass: adx.control.JSONMapper + +```text +OutboundNetworkDependenciesEndpointListResult Collection of Outbound Environment Endpoints + + OutboundNetworkDependenciesEndpointListResult Properties: + value - Collection of resources. - type: array of OutboundNetworkDependenciesEndpoint + nextLink - Link to next page of resources. - type: string +``` + +#### adx.control.models.OutboundNetworkDependenciesEndpointListResult.OutboundNetworkDependenciesEndpointListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.OutboundNetworkDependenciesEndpointProperties + +Superclass: adx.control.JSONMapper + +```text +OutboundNetworkDependenciesEndpointProperties Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. + + OutboundNetworkDependenciesEndpointProperties Properties: + category - The type of service accessed by the Kusto Service Environment, e.g., Azure Storage, Azure SQL Database, and Azure Active Directory. - type: string + endpoints - The endpoints that the Kusto Service Environment reaches the service at. - type: array of EndpointDependency + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.OutboundNetworkDependenciesEndpointProperties.OutboundNetworkDependenciesEndpointProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateEndpointConnection + +Superclass: adx.control.JSONMapper + +```text +PrivateEndpointConnection A private endpoint connection + + PrivateEndpointConnection Properties: + xproperties - type: PrivateEndpointConnectionProperties + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.PrivateEndpointConnection.PrivateEndpointConnection + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateEndpointConnectionListResult + +Superclass: adx.control.JSONMapper + +```text +PrivateEndpointConnectionListResult A list of private endpoint connections + + PrivateEndpointConnectionListResult Properties: + value - Array of private endpoint connections - type: array of PrivateEndpointConnection +``` + +#### adx.control.models.PrivateEndpointConnectionListResult.PrivateEndpointConnectionListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateEndpointConnectionProperties + +Superclass: adx.control.JSONMapper + +```text +PrivateEndpointConnectionProperties Properties of a private endpoint connection. + + PrivateEndpointConnectionProperties Properties: + privateEndpoint - type: PrivateEndpointProperty + privateLinkServiceConnectionState - type: PrivateLinkServiceConnectionStateProperty + groupId - Group id of the private endpoint. - type: string + provisioningState - Provisioning state of the private endpoint. - type: string +``` + +#### adx.control.models.PrivateEndpointConnectionProperties.PrivateEndpointConnectionProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateEndpointProperty + +Superclass: adx.control.JSONMapper + +```text +PrivateEndpointProperty Private endpoint which the connection belongs to. + + PrivateEndpointProperty Properties: + id - Resource id of the private endpoint. - type: string +``` + +#### adx.control.models.PrivateEndpointProperty.PrivateEndpointProperty + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateLinkResource + +Superclass: adx.control.JSONMapper + +```text +PrivateLinkResource A private link resource + + PrivateLinkResource Properties: + xproperties - type: PrivateLinkResourceProperties + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.PrivateLinkResource.PrivateLinkResource + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateLinkResourceListResult + +Superclass: adx.control.JSONMapper + +```text +PrivateLinkResourceListResult A list of private link resources + + PrivateLinkResourceListResult Properties: + value - Array of private link resources - type: array of PrivateLinkResource +``` + +#### adx.control.models.PrivateLinkResourceListResult.PrivateLinkResourceListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateLinkResourceProperties + +Superclass: adx.control.JSONMapper + +```text +PrivateLinkResourceProperties Properties of a private link resource. + + PrivateLinkResourceProperties Properties: + groupId - The private link resource group id. - type: string + requiredMembers - The private link resource required member names. - type: array of string + requiredZoneNames - The private link resource required zone names. - type: array of string +``` + +#### adx.control.models.PrivateLinkResourceProperties.PrivateLinkResourceProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.PrivateLinkServiceConnectionStateProperty + +Superclass: adx.control.JSONMapper + +```text +PrivateLinkServiceConnectionStateProperty Connection State of the Private Endpoint Connection. + + PrivateLinkServiceConnectionStateProperty Properties: + status - The private link service connection status. - type: string + description - The private link service connection description. - type: string + actionsRequired - Any action that is required beyond basic workflow (approve/ reject/ disconnect) - type: string +``` + +#### adx.control.models.PrivateLinkServiceConnectionStateProperty.PrivateLinkServiceConnectionStateProperty + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ProvisioningState + +Superclass: adx.control.JSONEnum + +```text +ProvisioningState The provisioned state of the resource. +``` + +```text +Enumeration values: + Running + Creating + Deleting + Succeeded + Failed + Moving + Canceled + +``` + +#### adx.control.models.ProvisioningState.ProvisioningState + +```text +ProvisioningState The provisioned state of the resource. +``` + +### adx.control.models.ProxyResource + +Superclass: adx.control.JSONMapper + +```text +ProxyResource The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location + + ProxyResource Properties: + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ProxyResource.ProxyResource + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadOnlyFollowingDatabase + +Superclass: adx.control.JSONMapper + +```text +ReadOnlyFollowingDatabase Class representing a read only following database. + + ReadOnlyFollowingDatabase Properties: + xproperties - type: ReadOnlyFollowingDatabaseProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ReadOnlyFollowingDatabase.ReadOnlyFollowingDatabase + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 + +Superclass: adx.control.JSONEnum + +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided +``` + +```text +Enumeration values: + Union + Replace + None + +``` + +#### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 + +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided +``` + +### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 + +Superclass: adx.control.JSONEnum + +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided +``` + +```text +Enumeration values: + Union + Replace + None + +``` + +#### adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 + +```text +ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided +``` + +### adx.control.models.ReadOnlyFollowingDatabaseProperties + +Superclass: adx.control.JSONMapper + +```text +ReadOnlyFollowingDatabaseProperties Class representing the Kusto database properties. + + ReadOnlyFollowingDatabaseProperties Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + leaderClusterResourceId - The name of the leader cluster - type: string + attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + principalsModificationKind - The principals modification kind of the database - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + databaseShareOrigin - type: DatabaseShareOrigin + suspensionDetails - type: SuspensionDetails +``` + +#### adx.control.models.ReadOnlyFollowingDatabaseProperties.ReadOnlyFollowingDatabaseProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadOnlyFollowingDatabaseProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ReadOnlyFollowingDatabaseProperties_1 Class representing the Kusto database properties. + + ReadOnlyFollowingDatabaseProperties_1 Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + leaderClusterResourceId - The name of the leader cluster - type: string + attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + principalsModificationKind - The principals modification kind of the database - type: string + tableLevelSharingProperties - type: TableLevelSharingProperties + originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + databaseShareOrigin - type: DatabaseShareOrigin + suspensionDetails - type: SuspensionDetails +``` + +#### adx.control.models.ReadOnlyFollowingDatabaseProperties_1.ReadOnlyFollowingDatabaseProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadWriteDatabase + +Superclass: adx.control.JSONMapper + +```text +ReadWriteDatabase Class representing a read write database. + + ReadWriteDatabase Properties: + xproperties - type: ReadWriteDatabaseProperties_1 + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.ReadWriteDatabase.ReadWriteDatabase + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadWriteDatabaseProperties + +Superclass: adx.control.JSONMapper + +```text +ReadWriteDatabaseProperties Class representing the Kusto database properties. + + ReadWriteDatabaseProperties Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + isFollowed - Indicates whether the database is followed. - type: logical + keyVaultProperties - type: KeyVaultProperties + suspensionDetails - type: SuspensionDetails +``` + +#### adx.control.models.ReadWriteDatabaseProperties.ReadWriteDatabaseProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ReadWriteDatabaseProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ReadWriteDatabaseProperties_1 Class representing the Kusto database properties. + + ReadWriteDatabaseProperties_1 Properties: + provisioningState - type: ProvisioningState + softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + statistics - type: DatabaseStatistics + isFollowed - Indicates whether the database is followed. - type: logical + keyVaultProperties - type: KeyVaultProperties + suspensionDetails - type: SuspensionDetails +``` + +#### adx.control.models.ReadWriteDatabaseProperties_1.ReadWriteDatabaseProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.Resource + +Superclass: adx.control.JSONMapper + +```text +Resource Common fields that are returned in the response for all Azure Resource Manager resources + + Resource Properties: + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.Resource.Resource + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ResourceSkuCapabilities + +Superclass: adx.control.JSONMapper + +```text +ResourceSkuCapabilities Describes The SKU capabilities object. + + ResourceSkuCapabilities Properties: + name - An invariant to describe the feature. - type: string + value - An invariant if the feature is measured by quantity. - type: string +``` + +#### adx.control.models.ResourceSkuCapabilities.ResourceSkuCapabilities + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ResourceSkuZoneDetails + +Superclass: adx.control.JSONMapper + +```text +ResourceSkuZoneDetails Describes The zonal capabilities of a SKU. + + ResourceSkuZoneDetails Properties: + name - The set of zones that the SKU is available in with the specified capabilities. - type: array of string + capabilities - A list of capabilities that are available for the SKU in the specified list of zones. - type: array of ResourceSkuCapabilities +``` + +#### adx.control.models.ResourceSkuZoneDetails.ResourceSkuZoneDetails + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.Script + +Superclass: adx.control.JSONMapper + +```text +Script Class representing a database script. + + Script Properties: + xproperties - type: ScriptProperties_1 + systemData - type: systemData + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.Script.Script + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ScriptCheckNameRequest + +Superclass: adx.control.JSONMapper + +```text +ScriptCheckNameRequest A script name availability request. + + ScriptCheckNameRequest Properties: + name - Script name. - type: string + type - The type of resource, Microsoft.Kusto/clusters/databases/scripts. - type: string +``` + +#### adx.control.models.ScriptCheckNameRequest.ScriptCheckNameRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ScriptCheckNameRequestTypeEnum + +Superclass: adx.control.JSONEnum + +```text +ScriptCheckNameRequestTypeEnum No description provided +``` + +```text +Enumeration values: + Microsoft_Kusto_clusters_databases_scripts + +``` + +#### adx.control.models.ScriptCheckNameRequestTypeEnum.ScriptCheckNameRequestTypeEnum + +```text +ScriptCheckNameRequestTypeEnum No description provided +``` + +### adx.control.models.ScriptListResult + +Superclass: adx.control.JSONMapper + +```text +ScriptListResult The list Kusto database script operation response. + + ScriptListResult Properties: + value - The list of Kusto scripts. - type: array of Script +``` + +#### adx.control.models.ScriptListResult.ScriptListResult + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ScriptProperties + +Superclass: adx.control.JSONMapper + +```text +ScriptProperties A class representing database script property. + + ScriptProperties Properties: + scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.ScriptProperties.ScriptProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.ScriptProperties_1 + +Superclass: adx.control.JSONMapper + +```text +ScriptProperties_1 A class representing database script property. + + ScriptProperties_1 Properties: + scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + provisioningState - type: ProvisioningState +``` + +#### adx.control.models.ScriptProperties_1.ScriptProperties_1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.SkuDescription + +Superclass: adx.control.JSONMapper + +```text +SkuDescription The Kusto SKU description of given resource type + + SkuDescription Properties: + resourceType - The resource type - type: string + name - The name of the SKU - type: string + tier - The tier of the SKU - type: string + locations - The set of locations that the SKU is available - type: array of string + locationInfo - Locations and zones - type: array of SkuLocationInfoItem + restrictions - The restrictions because of which SKU cannot be used - type: array of object +``` + +#### adx.control.models.SkuDescription.SkuDescription + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.SkuDescriptionList + +Superclass: adx.control.JSONMapper + +```text +SkuDescriptionList The list of the EngagementFabric SKU descriptions + + SkuDescriptionList Properties: + value - SKU descriptions - type: array of SkuDescription +``` + +#### adx.control.models.SkuDescriptionList.SkuDescriptionList + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.SkuLocationInfoItem + +Superclass: adx.control.JSONMapper + +```text +SkuLocationInfoItem The locations and zones info for SKU. + + SkuLocationInfoItem Properties: + location - The available location of the SKU. - type: string + zones - The available zone of the SKU. - type: array of string + zoneDetails - Gets details of capabilities available to a SKU in specific zones. - type: array of ResourceSkuZoneDetails +``` + +#### adx.control.models.SkuLocationInfoItem.SkuLocationInfoItem + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.Status + +Superclass: adx.control.JSONEnum + +```text +Status The status of operation. +``` + +```text +Enumeration values: + Succeeded + Canceled + Failed + Running + +``` + +#### adx.control.models.Status.Status + +```text +Status The status of operation. +``` + +### adx.control.models.SuspensionDetails + +Superclass: adx.control.JSONMapper + +```text +SuspensionDetails The database suspension details. If the database is suspended, this object contains information related to the database''s suspension state. + + SuspensionDetails Properties: + suspensionStartDate - The starting date and time of the suspension state. - type: datetime +``` + +#### adx.control.models.SuspensionDetails.SuspensionDetails + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.TableLevelSharingProperties + +Superclass: adx.control.JSONMapper + +```text +TableLevelSharingProperties Tables that will be included and excluded in the follower database + + TableLevelSharingProperties Properties: + tablesToInclude - List of tables to include in the follower database - type: array of string + tablesToExclude - List of tables to exclude from the follower database - type: array of string + externalTablesToInclude - List of external tables to include in the follower database - type: array of string + externalTablesToExclude - List of external tables to exclude from the follower database - type: array of string + materializedViewsToInclude - List of materialized views to include in the follower database - type: array of string + materializedViewsToExclude - List of materialized views to exclude from the follower database - type: array of string + functionsToInclude - List of functions to include in the follower database - type: array of string + functionsToExclude - List of functions to exclude from the follower database - type: array of string +``` + +#### adx.control.models.TableLevelSharingProperties.TableLevelSharingProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.The_object_that_describes_the_operation_ + +Superclass: adx.control.JSONMapper + +```text +The_object_that_describes_the_operation_ No description provided + + The_object_that_describes_the_operation_ Properties: + provider - type: string + operation - For example: read, write, delete. - type: string + resource - type: string + description - type: string +``` + +#### adx.control.models.The_object_that_describes_the_operation_.The_object_that_describes_the_operation_ + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.TrackedResource + +Superclass: adx.control.JSONMapper + +```text +TrackedResource The resource model definition for an Azure Resource Manager tracked top level resource which has ''tags'' and a ''location'' + + TrackedResource Properties: + tags - Resource tags. - type: adx.control.JSONMapperMap + location - The geo-location where the resource lives - type: string + id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + name - The name of the resource - type: string + type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string +``` + +#### adx.control.models.TrackedResource.TrackedResource + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.TrustedExternalTenant + +Superclass: adx.control.JSONMapper + +```text +TrustedExternalTenant Represents a tenant ID that is trusted by the cluster. + + TrustedExternalTenant Properties: + value - GUID representing an external tenant. - type: string +``` + +#### adx.control.models.TrustedExternalTenant.TrustedExternalTenant + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.VirtualNetworkConfiguration + +Superclass: adx.control.JSONMapper + +```text +VirtualNetworkConfiguration A class that contains virtual network definition. + + VirtualNetworkConfiguration Properties: + subnetId - The subnet resource id. - type: string + enginePublicIpId - Engine service''s public IP address resource id. - type: string + dataManagementPublicIpId - Data management''s service public IP address resource id. - type: string +``` + +#### adx.control.models.VirtualNetworkConfiguration.VirtualNetworkConfiguration + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.systemData + +Superclass: adx.control.JSONMapper + +```text +systemData Metadata pertaining to creation and last modification of the resource. + + systemData Properties: + createdBy - The identity that created the resource. - type: string + createdByType - The type of identity that created the resource. - type: string + createdAt - The timestamp of resource creation (UTC). - type: datetime + lastModifiedBy - The identity that last modified the resource. - type: string + lastModifiedByType - The type of identity that last modified the resource. - type: string + lastModifiedAt - The timestamp of resource last modification (UTC) - type: datetime +``` + +#### adx.control.models.systemData.systemData + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.control.models.systemDataCreatedByTypeEnum + +Superclass: adx.control.JSONEnum + +```text +systemDataCreatedByTypeEnum No description provided +``` + +```text +Enumeration values: + User + Application + ManagedIdentity + Key + +``` + +#### adx.control.models.systemDataCreatedByTypeEnum.systemDataCreatedByTypeEnum + +```text +systemDataCreatedByTypeEnum No description provided +``` + +### adx.control.models.systemDataLastModifiedByTypeEnum + +Superclass: adx.control.JSONEnum + +```text +systemDataLastModifiedByTypeEnum No description provided +``` + +```text +Enumeration values: + User + Application + ManagedIdentity + Key + +``` + +#### adx.control.models.systemDataLastModifiedByTypeEnum.systemDataLastModifiedByTypeEnum + +```text +systemDataLastModifiedByTypeEnum No description provided +``` + +### adx.control.BaseClient + +Superclasses: handle, matlab.mixin.CustomDisplay + +```text +BASECLIENT Base class for RESTful adx services. + Includes common initialization and authentication code. Authentication + code may have to be manually updated after code generation. + + This class cannot be instantiated directly, work with classes derived + from it to actually interact with the RESTful service. +``` + +#### adx.control.BaseClient.BaseClient + +```text +adx.control.BaseClient constructor to be called from + derived classes to allow setting properties upon construction +``` + +#### adx.control.BaseClient.applyCookies + +```text +adx.control.BaseClient/applyCookies is a function. + request = applyCookies(obj, request, uri) +``` + +#### adx.control.BaseClient.getOAuthToken + +```text +GETOAUTHTOKEN called by requestAuth to obtain OAuth token. + + To be customized after code generation. + + This template method simply returns the bearerToken of the object + which is assumed to have been manually set after manually having + completed the OAuth flow. Typically this method should be + customized to return a properly cached still valid token, refresh + an cached expired token just-in-time or perform the entire OAuth + flow from the start just-in-time and cache the token. + + As the exact OAuth flow may vary by OAuth provider, the full + authentication flow is not automatically generated and the + template method simply returns the bearerToken property. +``` + +#### adx.control.BaseClient.getPropertyGroups + +```text +Redact properties such that tokens, etc. do not show up + in Command Window output +``` + +#### adx.control.BaseClient.loadConfigFile + +```text +Loads client and http properties from a JSON file +``` + +#### adx.control.BaseClient.postSend + +```text +POSTSEND is called by every operation right after sending the + request. This method can for example be customized to add + customized error handling if the API responds to errors in a + consistent way. + + If the responses of only a few operations need to be customized + it is recommended to modify the generated operation methods + in the Api classes themselves rather than modifying postSend. + + By default the generated postSend does not do anything, it just + returns the response as is. +``` + +#### adx.control.BaseClient.preSend + +```text +PRESEND is called by every operation right before sending the + request. This method can for example be customized to add a + header to all (or most) requests if needed. + + If the requests of only a few operations need to be customized + it is recommended to modify the generated operation methods + in the Api classes themselves rather than modifying preSend. + + By default the generated preSend does not do anything, it just + returns the inputs as is. +``` + +#### adx.control.BaseClient.requestAuth + +```text +REQUESTAUTH will be called by operations which require + authentication. May have to be extended or modified after code + generation. For example, authentication methods not present in the + service OpenAPI spec or methods not directly supported by the + generator will have to be added. Generated logic may also not be + 100% correct if the OpenAPI spec contained multiple different + authentication methods of the same type. +``` + +#### adx.control.BaseClient.setCookies + +```text +adx.control.BaseClient/setCookies is a function. + setCookies(obj, history) +``` + +### adx.control.CookieJar + +Superclass: handle + +```text +COOKIEJAR helper class in MATLAB Generator for OpenAPI package, + provides a cookie jar. A cookie jar holds cookies which are typically + set by Set-Cookie headers in HTTP(S) requests and it can return the + cookies which should be included in a request to a given URL. + + CookieJar Properties: + path - Directory where to save cookies.mat + + CookieJar Methods: + setCookies - Adds cookies to the jar. + getCookies - Return an array of cookies which match the given URL + + persist - Forces cookie jar to be saved to disk + load - Forces cookie jar to be loaded from disk + purge - Empties the entire cookie jar and deletes cookies from + disk +``` + +#### adx.control.CookieJar.CookieJar + +```text +COOKIEJAR helper class in MATLAB Generator for OpenAPI package, + provides a cookie jar. A cookie jar holds cookies which are typically + set by Set-Cookie headers in HTTP(S) requests and it can return the + cookies which should be included in a request to a given URL. + + CookieJar Properties: + path - Directory where to save cookies.mat + + CookieJar Methods: + setCookies - Adds cookies to the jar. + getCookies - Return an array of cookies which match the given URL + + persist - Forces cookie jar to be saved to disk + load - Forces cookie jar to be loaded from disk + purge - Empties the entire cookie jar and deletes cookies from + disk +``` + +#### adx.control.CookieJar.getCookies + +```text +GETCOOKIES returns an array of matlab.net.http.Cookie for the + given URI which must be provided as first input. +``` + +#### adx.control.CookieJar.load + +```text +LOAD forces cookie jar to be loaded from disk. This method is + also called automatically by the constructor. Can be called + with a alternative directory as input to force saving + cookies.mat to this alternative location. The CookieJar + instance is then also reconfigured to continue working with + this new location. +``` + +#### adx.control.CookieJar.persist + +```text +PERSIST forces cookie jar to be saved to disk. This method is + also called automatically by setCookies if new cookies are + added. Can be called with a alternative directory as input to + force saving cookies.mat to this alternative location. The + CookieJar instance is then also reconfigured to continue + working with this new location. +``` + +#### adx.control.CookieJar.purge + +```text +PURGE completely empties the cookie jar and also deletes + cookies.mat from disk. +``` + +#### adx.control.CookieJar.setCookies + +```text +SETCOOKIES Adds cookies to the jar. Expects an array of + matlab.net.http.CookieInfo as input. This can for example be + obtained using matlab.net.http.CookieInfo.collectFromLog or + by manually instantiating matlab.net.http.CookieInfo. + + See Also: matlab.net.http.CookieInfo.collectFromLog +``` + +### adx.control.JSONEnum + +```text +JSONEnum Base class for enumerations when working with adx.control.JSONMapper + When adding enumeration properties to adx.control.JSONMapper objects, the custom + enumeration classes must inherit from this JSONEnum base class. And + the custom enumeration class must declare string values for each enum + element, these represent the JSON representation of the enumeration + values; this is required since not all JSON values are guaranteed to + be valid MATLAB variable names whereas the actual MATLAB enumeration + values must be. + + Example: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL.1") + VAL2 ("VAL.2") + end + end + + Even if JSON values are valid MATLAB variables, the string value must + be provided, e.g.: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL1") + VAL2 ("VAL2") + end + end +``` + +#### adx.control.JSONEnum.JSONEnum + +```text +JSONEnum Base class for enumerations when working with adx.control.JSONMapper + When adding enumeration properties to adx.control.JSONMapper objects, the custom + enumeration classes must inherit from this JSONEnum base class. And + the custom enumeration class must declare string values for each enum + element, these represent the JSON representation of the enumeration + values; this is required since not all JSON values are guaranteed to + be valid MATLAB variable names whereas the actual MATLAB enumeration + values must be. + + Example: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL.1") + VAL2 ("VAL.2") + end + end + + Even if JSON values are valid MATLAB variables, the string value must + be provided, e.g.: + + classdef myEnum < JSONEnum + enumeration + VAL1 ("VAL1") + VAL2 ("VAL2") + end + end +``` + +#### adx.control.JSONEnum.fromJSON + +```text +adx.control.JSONEnum/fromJSON is a function. + v = fromJSON(obj, json) +``` + +### adx.control.JSONMapper + +Superclass: handle + +```text +adx.control.JSONMapper base class - adds JSON serialization and deserialization. + Derive MATLAB classes from this class to allow them to be + deserialized from JSON mapping the JSON fields to the class + properties. To allow proper nesting of object, derived objects must + call the adx.control.JSONMapper constructor from their constructor: + + function obj = myClass(s,inputs) + arguments + s {adx.control.JSONMapper.ConstructorArgument} = [] + inputs.?myClass + end + obj@adx.control.JSONMapper(s,inputs); + end + + Make sure to update the class name (myClass in the example) in both + the function name as well as in the arguments block. + + During serialization or deserialization the MATLAB object definition + is leading. JSON data is converted to MATLAB data types based on the + type declaration in MATLAB. Therefore all properties of the MATLAB + class *must* have a type declaration. Also, fields are only + deserialized if they actually exist on the MATLAB class, any + additional fields in the JSON input are ignored. + + Supported property datatypes: double, float, uint8, int8, uint16, + int16, uint32, int32, uint64, int64, logical, enum, string, char, + datetime (must be annotated), containers.Map, classes derived from + adx.control.JSONMapper. + + Annotations can be added to properties as "validation functions". + + adx.control.JSONMapper Methods: + + fieldName - allows property to be mapped to a JSON field with + different name + JSONArray - specifies field is a JSON array + epochDatetime - for datetime properties specifies in JSON the date + time is encoded as epoch. Must be the first + attribute if used + stringDatetime - for datetime properties specifies in JSON the date + time is encoded as string with a particular format. + Must be the first attribute if used. + doNotParse - indicate that a field's JSON should not be parsed. + if JSONArray is also applied the field will be + parsed at the array level. +``` + +#### adx.control.JSONMapper.ConstructorArgument + +```text +CONSTRUCTORARGUMENT to be used in derived constructors to + allow string or char arrays as input and allows the + constructor to be used when working with nested adx.control.JSONMapper + derived classes. +``` + +#### adx.control.JSONMapper.JSONArray + +```text +JSONARRAY adx.control.JSONMapper Annotation + Specified that the JSON field is an array. + + Ensures that when serializing a MATLAB scalar it is in fact + encoded as a JSON array rather than a scalar if the property + has been annotated with this option. +``` + +#### adx.control.JSONMapper.JSONMapper + +```text +adx.control.JSONMapper Constructor. Call this from + derived classes constructors: + + function obj = myClass(s,inputs) + arguments + s {adx.control.JSONMapper.ConstructorArgument} = [] + inputs.?myClass + end + obj@adx.control.JSONMapper(s,inputs); + end + + Make sure to update the class name (myClass in the example) + in both the function name as well as in the arguments block. +``` + +#### adx.control.JSONMapper.doNotParse + +```text +adx.control.JSONMapper.doNotParse is a function. + adx.control.JSONMapper.doNotParse(~) +``` + +#### adx.control.JSONMapper.epochDatetime + +```text +EPOCHDATETIME adx.control.JSONMapper Annotation + When working with datetime fields either epochDatetime or + stringDatetime annotation is required to specify how the + datetime is encoded in JSON. This must be the first + annotation. + + When called without inputs POSIX time/UNIX timestamp is + assumed. + + Optional Name-Value pairs TimeZone, Epoch and TicksPerSecond + can be provided (their meaning is the same as when working + with datetime(d,'ConvertFrom','epochtime', OPTIONS). + + Example: + + properties + % start_date is a UNIX timestamp + start_date {adx.control.JSONMapper.epochDatetime} + % end_date is UNIX timestamp in milliseconds + end_date {adx.control.JSONMapper.epochDatetime(end_date,'TicksPerSecond',1000)} + end +``` + +#### adx.control.JSONMapper.fieldName + +```text +FIELDNAME adx.control.JSONMapper Annotation + This can be added to properties if the MATLAB property name + and JSON field name differ. For example, when the JSON field + name is not a valid MATLAB identifier. + + Example: + + properties + some_field {adx.control.JSONMapper.fieldName(some_field,"some.field")} + end +``` + +#### adx.control.JSONMapper.fromJSON + +```text +adx.control.JSONMapper/fromJSON is a function. + obj = fromJSON(obj, json) +``` + +#### adx.control.JSONMapper.getPayload + +```text +GETPAYLOAD JSON encodes the object taking into account + required and optional properties. + + Verifies that required properties have indeed been set. + Includes optional properties in the output. All other + properties are not included in the output. +``` + +#### adx.control.JSONMapper.jsonencode + +```text +JSONENCODE serializes object as JSON + Can serialize whole hierarchies of objects if all classes + in the hierarchy derive from adx.control.JSONMapper. + + The function should only ever be called with one input: the + object to be serialized. The second input is only meant to be + used internally when jsonencode is called recursively. + + Example: + + json = jsonencode(obj); +``` + +#### adx.control.JSONMapper.stringDatetime + +```text +STRINGDATETIME adx.control.JSONMapper Annotation + When working with datetime fields either epochDatetime or + stringDatetime annotation is required to specify how the + datetime is encoded in JSON. This must be the first + annotation. + + stringDatetime requires the string format as input. + + Optional Name-Value pair TimeZone can be provided. + + Example: + + properties + start_date {adx.control.JSONMapper.stringDatetime(start_date,'yyyy-MM-dd''T''HH:mm:ss')} + end +``` + +### adx.control.JSONMapperMap + +Superclass: handle + +```text +JSONMAPPERMAP Alternative to containers.Map for free-form key-value + pairs. The advantage of JSONMAPPERMAP over containers.Map is that + instances are not shared when used as a class property. +``` + +#### adx.control.JSONMapperMap.JSONMapperMap + +```text +JSONMAPPERMAP Constructor. Can be called with key value pairs + as input to initialize the map with those keys and values. +``` + +#### adx.control.JSONMapperMap.disp + +```text +DISP Displays keys and corresponding values in the map. +``` + +#### adx.control.JSONMapperMap.jsonencode + +```text +JSONENCODE JSON encodes the map. +``` + +#### adx.control.JSONMapperMap.subsasgn + +```text +SUBSASGN Assign or update a key-value pair in the map. +``` + +#### adx.control.JSONMapperMap.subsref + +```text +SUBSREF retrieve a key value from the map. +``` + +### adx.control.JSONPropertyInfo + +Superclass: handle + +```text +JSONPROPERTYINFO class used by adx.control.JSONMapper internally +``` + +#### adx.control.JSONPropertyInfo.JSONPropertyInfo + +```text +JSONPROPERTYINFO class used by adx.control.JSONMapper internally +``` + +#### adx.control.JSONPropertyInfo.getPropertyInfo + +```text +For all public properties +``` + +### adx.data + +### adx.data.api + +### adx.data.api.Ingest + +Superclass: adx.control.BaseClient + +```text +Ingest Class to run an ingest command +``` + +#### adx.data.api.Ingest.Ingest + +```text +Call base constructor to override any configured settings +``` + +#### adx.data.api.Ingest.ingestRun + +```text +ingestRun +``` + +### adx.data.api.Management + +Superclass: adx.control.BaseClient + +```text +Management Class to run a management command +``` + +#### adx.data.api.Management.Management + +```text +Call base constructor to override any configured settings +``` + +#### adx.data.api.Management.getPropertyGroups + +```text +Redact properties such that tokens, etc. do not show up + in Command Window output + +Help for adx.data.api.Management/getPropertyGroups is inherited from superclass adx.control.BaseClient +``` + +#### adx.data.api.Management.managementRun + +```text +managementRun +``` + +### adx.data.api.Query + +Superclass: adx.control.BaseClient + +```text +Query Class to run a KQL query + + Example: + % Build a request object + request = adx.data.models.QueryRequest(); + colName = "myColumn"; + message = "Hello World"; + + % Set the KQL query fields + request.csl = sprintf('print %s="%s"', colName, message); + % Don't set the database use the default in .json config file + % request.db = "myDatabaseName" + % No adx.data.models.ClientRequestProperties required + % request.requestProperties + + % Create the Query object and run the request + query = adx.data.api.Query(); + % The default cluster to use is configured using a .json configuration file + % Run the query: + [code, result, response, requestId] = query.queryRun(request); %#ok + + if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); + else + error('Error running query: %s', request.csl); + end +``` + +#### adx.data.api.Query.Query + +```text +Call base constructor to override any configured settings +``` + +#### adx.data.api.Query.queryRun + +```text +queryRun Runs a KQL query + + Required argument(s) + queryRequest: A populated adx.data.models.QueryRequest that defines the + query, the database and potentially query properties. + + Optional named arguments: + cluster: A cluster URL as a scalar string. + + apiVersion: URL path API version field, if not provided and the query starts + with "." v1 is used otherwise v2 is used. + + skipRowsArrayDecode: Returns a adx.data.models.QueryV2ResponseUnparsedRows where + the frames are parsed but the array of rows are not parsed + into individual values if true. Otherwise a + adx.data.models.QueryV2ResponseRaw is returned. + Only applied in the case of v2 APIs. + Default is false. + + skipResponseDecode: Logical flag to determine if the HTTP response should be + be parsed at all. If true the result is returned as a + adx.data.models.QueryV2ResponseRaw.empty or a + adx.data.models.QueryV1ResponseRaw.empty as appropriate. + Default is false. + + verbose: Logical to enable additional output. Default is false. + + Return values: + code: HTTP status code, 200 (matlab.net.http.StatusCode.OK) indicates success. + + result: Returned data is various forms or an ErrorResponse: + adx.control.models.ErrorResponse + adx.data.models.QueryV2ResponseRaw + adx.data.models.QueryV2ResponseUnparsedRows + adx.data.models.QueryV1ResponseRaw + + response: The original HTTP response to the matlab.net.http.RequestMessage.send + The response may have been optionally processed by the baseClient + postSend method. + + requestId: A UUID value generated and submitted with the query to + identify it. +``` + +### adx.data.models + +### adx.data.models.ClientRequestProperties + +Superclass: adx.control.JSONMapper + +```text +ClientRequestProperties Adds ClientRequestPropertiesOptions to a query + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement +``` + +#### adx.data.models.ClientRequestProperties.ClientRequestProperties + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.ClientRequestPropertiesOptions + +Superclass: adx.control.JSONMapper + +```text +ClientRequestPropertiesOptions Request properties control how a query or command executes and returns results + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/request-properties#clientrequestproperties-options +``` + +#### adx.data.models.ClientRequestPropertiesOptions.ClientRequestPropertiesOptions + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.Column + +Superclass: adx.control.JSONMapper + +```text +Column Represents a Column in a v2 API response +``` + +#### adx.data.models.Column.Column + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.ColumnV1 + +Superclass: adx.control.JSONMapper + +```text +ColumnV1 Represents a Column in a v1 API response +``` + +#### adx.data.models.ColumnV1.ColumnV1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataSetCompletion + +Superclass: adx.control.JSONMapper + +```text +DataSetCompletion Final field of a v2 response +``` + +#### adx.data.models.DataSetCompletion.DataSetCompletion + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataSetHeader + +Superclass: adx.control.JSONMapper + +```text +DataSetHeader Header field of a v2 response +``` + +#### adx.data.models.DataSetHeader.DataSetHeader + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataTable + +Superclass: adx.control.JSONMapper + +```text +DataTable Represents a v1 API format table +``` + +#### adx.data.models.DataTable.DataTable + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataTableV1 + +Superclass: adx.control.JSONMapper + +```text +DataTableV1 Represents a v1 API format table +``` + +#### adx.data.models.DataTableV1.DataTableV1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataTables + +Superclass: adx.control.JSONMapper + +```text +DataTables Represents an array of v2 API tables +``` + +#### adx.data.models.DataTables.DataTables + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.DataTablesV1 + +Superclass: adx.control.JSONMapper + +```text +DataTablesV1 Represents an array of v1 API tables +``` + +#### adx.data.models.DataTablesV1.DataTablesV1 + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.IngestionResourcesSnapshot + +```text +INGESTIONRESOURCESSNAPSHOT Contains result of .get ingestion resources request + + Example: + + managementClient = adx.data.api.Management(); + [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources')); + if code == matlab.net.http.StatusCode.OK + irs = adx.data.models.IngestionResourcesSnapshot(result); + end + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/kusto-ingest-client-rest#retrieve-ingestion-resources +``` + +#### adx.data.models.IngestionResourcesSnapshot.IngestionResourcesSnapshot + +```text +INGESTIONRESOURCESSNAPSHOT Constructor for IngestionResourcesSnapshot object +``` + +#### adx.data.models.IngestionResourcesSnapshot.table + +```text +TABLE Convert a IngestionResourcesSnapshot Data property to a MATLAB table +``` + +### adx.data.models.ManagementRequest + +Superclass: adx.control.JSONMapper + +```text +ManagementRequest Defines a Request Object for a management query + If a database field is defined in the default configuration file + location its value will be used for the db property. +``` + +#### adx.data.models.ManagementRequest.ManagementRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.QueryParameter + +Superclass: adx.control.JSONMapper + +```text +QueryParameter Represents Key Value pairs for queries + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement +``` + +#### adx.data.models.QueryParameter.QueryParameter + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.QueryRequest + +Superclass: adx.control.JSONMapper + +```text +QueryRequest Defines a Request Object for a query + If a database field is defined in the default configuration file + location its value will be used for the db property. +``` + +#### adx.data.models.QueryRequest.QueryRequest + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.QueryV1ResponseRaw + +Superclass: adx.control.JSONMapper + +```text +QueryV1ResponseRaw Represents a v1 API response prior to conversion to a table or error +``` + +#### adx.data.models.QueryV1ResponseRaw.QueryV1ResponseRaw + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.QueryV2ResponseRaw + +Superclass: adx.control.JSONMapper + +```text +QueryV2ResponseRaw Represents a v2 API response prior to conversion to a table or error +``` + +#### adx.data.models.QueryV2ResponseRaw.QueryV2ResponseRaw + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +#### adx.data.models.QueryV2ResponseRaw.getDataSetCompletionFrame + +```text +adx.data.models.QueryV2ResponseRaw/getDataSetCompletionFrame is a function. + dataSetCompletion = getDataSetCompletionFrame(obj) +``` + +#### adx.data.models.QueryV2ResponseRaw.getDataSetHeader + +```text +adx.data.models.QueryV2ResponseRaw/getDataSetHeader is a function. + dataSetHeader = getDataSetHeader(obj) +``` + +### adx.data.models.QueryV2ResponseUnparsedRows + +Superclass: adx.control.JSONMapper + +```text +QueryV2ResponseUnparsedRows Represents a v2 API response prior to conversion to a table or error Rows are not parsed +``` + +#### adx.data.models.QueryV2ResponseUnparsedRows.QueryV2ResponseUnparsedRows + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +#### adx.data.models.QueryV2ResponseUnparsedRows.getDataSetCompletionFrame + +```text +adx.data.models.QueryV2ResponseUnparsedRows/getDataSetCompletionFrame is a function. + dataSetCompletion = getDataSetCompletionFrame(obj) +``` + +#### adx.data.models.QueryV2ResponseUnparsedRows.getDataSetHeader + +```text +adx.data.models.QueryV2ResponseUnparsedRows/getDataSetHeader is a function. + dataSetHeader = getDataSetHeader(obj) +``` + +### adx.data.models.QueueIngestionMessage + +Superclass: adx.control.JSONMapper + +```text +QueueIngestionMessage The message that the Kusto Data Management service expects to read from the input Azure Queue is a JSON document in the following format +``` + +#### adx.data.models.QueueIngestionMessage.QueueIngestionMessage + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.Row + +Superclass: adx.control.JSONMapper + +```text +Row Represents a row that is parsed by JSONMapper + Class not used pending updated JSONMapper capability to handle simple arrays +``` + +#### adx.data.models.Row.Row + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.RowUnparsed + +Superclass: adx.control.JSONMapper + +```text +RowUnparsed Row data returned which is not to be parsed by JSONMapper + Value is held an an unparsed string +``` + +#### adx.data.models.RowUnparsed.RowUnparsed + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.RowsUnparsed + +Superclass: adx.control.JSONMapper + +```text +RowsUnparsed Row data returned which is not to be parsed by JSONMapper + Value is held an an unparsed string +``` + +#### adx.data.models.RowsUnparsed.RowsUnparsed + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.StreamFormat + +```text +STREAMFORMAT Specifies the format of the data in the request body + The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro + See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats +``` + +```text +Enumeration values: + CSV + TSV + SCsv + SOHsv + PSV + JSON + MultiJSON + Avro + +``` + +#### adx.data.models.StreamFormat.StreamFormat + +```text +STREAMFORMAT Specifies the format of the data in the request body + The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro + See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats +``` + +### adx.data.models.TableCompletion + +Superclass: adx.control.JSONMapper + +```text +TableCompletion Field to indicate the end of a table +``` + +#### adx.data.models.TableCompletion.TableCompletion + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.TableFragment + +Superclass: adx.control.JSONMapper + +```text +TableFragment A part of a returned table +``` + +#### adx.data.models.TableFragment.TableFragment + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.TableFragmentType + +Superclass: adx.control.JSONEnum + +```text +TableFragmentType Describes what the client should do with this fragment + The value should be one of: + DataAppend + DataReplace + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +```text +Enumeration values: + DataAppend + DataReplace + +``` + +#### adx.data.models.TableFragmentType.TableFragmentType + +```text +TableFragmentType Describes what the client should do with this fragment + The value should be one of: + DataAppend + DataReplace + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +### adx.data.models.TableHeader + +Superclass: adx.control.JSONMapper + +```text +TableHeader Header fields with top-level table properties +``` + +#### adx.data.models.TableHeader.TableHeader + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### adx.data.models.TableKind + +Superclass: adx.control.JSONEnum + +```text +TableKind Specifies the type of a Table response + The value should be one of: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +```text +Enumeration values: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown + +``` + +#### adx.data.models.TableKind.TableKind + +```text +TableKind Specifies the type of a Table response + The value should be one of: + PrimaryResult + QueryCompletionInformation + QueryTraceLog + QueryPerfLog + TableOfContents + QueryProperties + QueryPlan + Unknown + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +### adx.data.models.TableProgress + +Superclass: adx.control.JSONMapper + +```text +TableProgress Indicates the percentage of a task task that is complete +``` + +#### adx.data.models.TableProgress.TableProgress + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### azure + +### azure.core + +### azure.core.credential + +### azure.core.credential.AccessToken + +Superclass: azure.object + +```text +ACCESSTOKEN An immutable access token with a token string and an expiration time + Can be created based on a corresponding Java com.azure.core.credential.AccessToken + argument or a token string and an expiry datetime (including a timezone). +``` + +#### azure.core.credential.AccessToken.AccessToken + +```text +ACCESSTOKEN An immutable access token with a token string and an expiration time + Can be created based on a corresponding Java com.azure.core.credential.AccessToken + argument or a token string and an expiry datetime (including a timezone). +``` + +#### azure.core.credential.AccessToken.getToken + +```text +GETTOKEN Return token as a character vector. +``` + +#### azure.core.credential.AccessToken.isExpired + +```text +ISEXPIRED Returns a logical if the token has expired or not +``` + +### azure.core.credential.AzureSasCredential + +Superclass: azure.object + +```text +AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate + + See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/ +``` + +#### azure.core.credential.AzureSasCredential.AzureSasCredential + +```text +AZURESASCREDENTIAL A credential that uses a shared access signature to authenticate + + See also: https://azuresdkdocs.blob.core.windows.net/$web/java/azure-core/1.20.0/index.html?com/azure/ +``` + +#### azure.core.credential.AzureSasCredential.AzureSasSignature + +```text +azure.core.credential.AzureSasCredential/AzureSasSignature is a function. + obj = AzureSasSignature(varargin) +``` + +#### azure.core.credential.AzureSasCredential.getSignature + +```text +GETSIGNATURE Retrieves the shared access signature associated to this credential + Returns a character vector. + + Copyright 2021 The MathWorks, Inc. +``` + +#### azure.core.credential.AzureSasCredential.update + +```text +UPDATE Rotates the shared access signature associated to this credential + Returns an updated AzureSasCredential object. +``` + +### azure.core.credential.TokenCredential + +Superclass: azure.object + +```text +TOKENCREDENTIAL Credential that can provide an access token +``` + +#### azure.core.credential.TokenCredential.TokenCredential + +```text +TOKENCREDENTIAL Credential that can provide an access token +``` + +#### azure.core.credential.TokenCredential.getToken + +```text +GETTOKEN Asynchronously retrieves an AccessToken + An azure.core.credential.AccessToken is returned. + This call is invokes the getTokenSync method rather than + getToken intentionally. +``` + +#### azure.core.credential.TokenCredential.getTokenSync + +```text +GETTOKENSYNC Synchronously retrieves an AccessToken + An azure.core.credential.AccessToken is returned. +``` + +### azure.core.credential.TokenRequestContext + +Superclass: azure.object + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.core.credential.TokenRequestContext.TokenRequestContext + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.core.credential.TokenRequestContext.addScopes + +```text +ADDSCOPES Adds one or more scopes to the request scopes + Scopes should be provided as character vector or scalar string arguments. + The updated TokenRequestContext is returned. +``` + +#### azure.core.credential.TokenRequestContext.getClaims + +```text +GETCLAIMS Get the additional claims to be included in the token + Returns a character vector. +``` + +#### azure.core.credential.TokenRequestContext.getScopes + +```text +GETSCOPES Gets the scopes required for the token + Returns a string array. +``` + +#### azure.core.credential.TokenRequestContext.getTenantId + +```text +GETTENANTID Get the tenant id to be used for the authentication request + Returns a character vector. +``` + +#### azure.core.credential.TokenRequestContext.setClaims + +```text +SETCLAIMS Set the additional claims to be included in the token + The claims should be provided as a character vector or scalar string. + Returns an updated azure.core.credential.TokenRequestContext. +``` + +#### azure.core.credential.TokenRequestContext.setTenantId + +```text +SETTENANTID Set the tenant id to be used for the authentication request + The tenantId should be provided as a character vector or scalar string. + Returns an updated azure.core.credential.TokenRequestContext. +``` + +### azure.core.util + +### azure.core.util.polling + +### azure.core.util.polling.LongRunningOperationStatus + +Superclass: azure.object + +```text +LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation + The poll operation is considered complete when the status is one of: + SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED. + + Possible values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED +``` + +#### azure.core.util.polling.LongRunningOperationStatus.LongRunningOperationStatus + +```text +LONGRUNNINGOPERATIONSTATUS Represent states of a long-running operation + The poll operation is considered complete when the status is one of: + SUCCESSFULLY_COMPLETED, USER_CANCELLED or FAILED. + + Possible values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED +``` + +#### azure.core.util.polling.LongRunningOperationStatus.fromString + +```text +FROMSTRING Creates a LongRunningOperationStatus from its string representation + A name argument of type character vector or scalar string is required. + A logical isComplete argument is required. + A azure.core.util.LongRunningOperationStatus is returned. +``` + +#### azure.core.util.polling.LongRunningOperationStatus.isComplete + +```text +ISCOMPLETE Returns a logical to represent if in a completed state or not +``` + +#### azure.core.util.polling.LongRunningOperationStatus.toString + +```text +TOSTRING Returns a string representation of LongRunningOperationStatus + Expected values are: + FAILED + IN_PROGRESS + NOT_STARTED + SUCCESSFULLY_COMPLETED + USER_CANCELLED + + A character vector is returned. +``` + +### azure.core.util.polling.PollResponse + +Superclass: azure.object + +```text +POLLRESPONSE Represents a response from long-running polling operation + It provides information such as the current status of the long-running + operation and any value returned in the poll. + + Can be created based on a corresponding com.azure.core.util.polling.PollResponse + Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus + or azure.core.util.polling.LongRunningOperationStatus status argument and a + message argument of type character vector or scalar string. +``` + +#### azure.core.util.polling.PollResponse.PollResponse + +```text +POLLRESPONSE Represents a response from long-running polling operation + It provides information such as the current status of the long-running + operation and any value returned in the poll. + + Can be created based on a corresponding com.azure.core.util.polling.PollResponse + Java object argument or a com.azure.core.util.polling.LongRunningOperationStatus + or azure.core.util.polling.LongRunningOperationStatus status argument and a + message argument of type character vector or scalar string. +``` + +#### azure.core.util.polling.PollResponse.getRetryAfter + +```text +GETRETRYAFTER Gets requested delay until next polling operation is performed + If a negative value is returned the poller should determine on its own when + the next poll operation is to occur. +``` + +#### azure.core.util.polling.PollResponse.getStatus + +```text +GETSTATUS Gets status of a long-running operation at last polling operation +``` + +#### azure.core.util.polling.PollResponse.getValue + +```text +GETVALUE The value returned as a result of the last successful poll operation + This can be any custom user defined object, or null if no value was returned + from the service. The return value will be subject to standard MATLAB to Java + data type conversion and the following conversions: + java.lang.String -> character vector +``` + +### azure.core.util.polling.SyncPoller + +Superclass: azure.object + +```text +SYNCPOLLER Simplifies executing long-running operations against Azure + There is no constructor as this is based on a Java interface. A SyncPoller + must be created based on the underlying SyncPoller Java object. +``` + +#### azure.core.util.polling.SyncPoller.SyncPoller + +```text +SYNCPOLLER Simplifies executing long-running operations against Azure + There is no constructor as this is based on a Java interface. A SyncPoller + must be created based on the underlying SyncPoller Java object. +``` + +#### azure.core.util.polling.SyncPoller.cancelOperation + +```text +CANCELOPERATION Cancels the remote long-running operation + Requires cancellation to be supported by the service. +``` + +#### azure.core.util.polling.SyncPoller.poll + +```text +POLL Poll once and return the poll response received + A azure.core.util.polling.PollResponse is returned. +``` + +#### azure.core.util.polling.SyncPoller.waitForCompletion + +```text +WAITFORCOMPLETION Wait for polling to complete with optional timeout + A azure.core.util.polling.PollResponse is returned. + An optional timeout can be provided as a scalar number of seconds to + wait for polling to complete. The value will be converted to an integer value + of seconds. +``` + +### azure.identity + +### azure.identity.AuthenticationRecord + +Superclass: azure.object + +```text +Represents the account information relating to an authentication request + Held as a Java reactor.core.publisher.MonoMap. +``` + +#### azure.identity.AuthenticationRecord.AuthenticationRecord + +```text +Represents the account information relating to an authentication request + Held as a Java reactor.core.publisher.MonoMap. +``` + +#### azure.identity.AuthenticationRecord.subscribe + +```text +SUBSCRIBE Subscribe to this Mono and request unbounded demand + Used to trigger the device code challenge flow. + Returns a Java reactor.core.publisher.LambdaMonoSubscriber object. + The return value is not normally required. +``` + +### azure.identity.AzureCliCredential + +Superclass: azure.core.credential.TokenCredential + +```text +AZURECLICREDENTIAL Provides token credentials based on Azure CLI command + If the CLI is installed and authenticated there is no need to further + authenticate within MATLAB. + A object is created based on a corresponding Java com.azure.identity.AzureCliCredential + object. +``` + +#### azure.identity.AzureCliCredential.AzureCliCredential + +```text +Created using a AzureCliCredential java object from the + AzureCliCredentialBuilder class only +``` + +### azure.identity.AzureCliCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +AZURECLICREDENTIALBUILDER Credential builder for instantiating a AzureCliCredential +``` + +#### azure.identity.AzureCliCredentialBuilder.AzureCliCredentialBuilder + +```text +AZURECLICREDENTIALBUILDER Credential builder for instantiating a AzureCliCredential +``` + +#### azure.identity.AzureCliCredentialBuilder.build + +```text +BUILD Creates new AzureCliCredential with the configured options set +``` + +### azure.identity.ChainedTokenCredential + +Superclass: azure.core.credential.TokenCredential + +```text +CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers +``` + +#### azure.identity.ChainedTokenCredential.ChainedTokenCredential + +```text +CHAINEDTOKENCREDENTIAL Provides a credential from a list of providers +``` + +### azure.identity.ChainedTokenCredentialBuilder + +Superclass: azure.object + +```text +CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential +``` + +#### azure.identity.ChainedTokenCredentialBuilder.ChainedTokenCredentialBuilder + +```text +CHAINEDTOKENCREDENTIALBUILDER Builder for instantiating a ChainedTokenCredential +``` + +#### azure.identity.ChainedTokenCredentialBuilder.addLast + +```text +ADDLAST Adds a credential to try to authenticate at the end of the chain +``` + +#### azure.identity.ChainedTokenCredentialBuilder.build + +```text +BUILD Creates new ChainedTokenCredential with the configured options set +``` + +### azure.identity.ClientCertificateCredential + +Superclass: azure.core.credential.TokenCredential + +```text +CLIENTCERTIFICATECREDENTIAL AAD credential acquires a token with a client certificate +``` + +#### azure.identity.ClientCertificateCredential.ClientCertificateCredential + +```text +Created using a ClientCertificateCredential java object from the + ClientCertificateCredentialBuilder class only +``` + +### azure.identity.ClientCertificateCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential +``` + +#### azure.identity.ClientCertificateCredentialBuilder.ClientCertificateCredentialBuilder + +```text +CLIENTCERTIFICATECREDENTIALBUILDER Builder for ClientCertificateCredential +``` + +#### azure.identity.ClientCertificateCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated ClientCertificateCredentialBuilder is returned. +``` + +#### azure.identity.ClientCertificateCredentialBuilder.build + +```text +BUILD Creates new ClientCertificateCredential with the configured options set +``` + +#### azure.identity.ClientCertificateCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated ClientCertificateCredentialBuilder is returned. +``` + +#### azure.identity.ClientCertificateCredentialBuilder.pemCertificate + +```text +PEMCERTIFICATE Sets the path of the PEM certificate for authenticating to AAD + An updated ClientCertificateCredentialBuilder is returned. +``` + +#### azure.identity.ClientCertificateCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through ClientCertificateCredential + An updated ClientCertificateCredentialBuilder is returned. +``` + +### azure.identity.ClientSecretCredential + +Superclass: azure.core.credential.TokenCredential + +```text +CLIENTSECRETCREDENTIAL AAD credential acquires a token with a client secret +``` + +#### azure.identity.ClientSecretCredential.ClientSecretCredential + +```text +Created using a ClientSecretCredential java object from the + ClientSecretCredentialBuilder class only +``` + +### azure.identity.ClientSecretCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder +``` + +#### azure.identity.ClientSecretCredentialBuilder.ClientSecretCredentialBuilder + +```text +CLIENTSECRETCREDENTIALBUILDER Builder for ClientSecretCredentialBuilder +``` + +#### azure.identity.ClientSecretCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated ClientSecretCredentialBuilder is returned. +``` + +#### azure.identity.ClientSecretCredentialBuilder.build + +```text +BUILD Creates new ClientSecretCredential with the configured options set +``` + +#### azure.identity.ClientSecretCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated ClientSecretCredentialBuilder is returned. +``` + +#### azure.identity.ClientSecretCredentialBuilder.clientSecret + +```text +CLIENTID Sets the client secret for the authentication + An updated ClientSecretCredentialBuilder is returned. +``` + +#### azure.identity.ClientSecretCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through ClientSecretCredential + An updated ClientSecretCredentialBuilder is returned. +``` + +### azure.identity.CredentialBuilderBase + +Superclass: azure.object + +```text +azure.identity.CredentialBuilderBase is a class. + obj = azure.identity.CredentialBuilderBase +``` + +#### azure.identity.CredentialBuilderBase.CredentialBuilderBase + +```text +azure.identity.CredentialBuilderBase/CredentialBuilderBase is a constructor. + obj = azure.identity.CredentialBuilderBase +``` + +#### azure.identity.CredentialBuilderBase.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +### azure.identity.DefaultAzureCredential + +Superclass: azure.core.credential.TokenCredential + +```text +DEFAULTAZURECREDENTIAL Creates credential from environment or the shared token + It tries to create a valid credential in the following order: + EnvironmentCredential + ManagedIdentityCredential + SharedTokenCacheCredential + IntelliJCredential + VisualStudioCodeCredential + AzureCliCredential + Fails if none of the credentials above could be created. +``` + +#### azure.identity.DefaultAzureCredential.DefaultAzureCredential + +```text +Created using a DefaultAzureCredential java object from the + DefaultAzureCredentialBuilder class only +``` + +### azure.identity.DefaultAzureCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential +``` + +#### azure.identity.DefaultAzureCredentialBuilder.DefaultAzureCredentialBuilder + +```text +DEFAULTAZURECREDENTIALBUILDER Credential builder for DefaultAzureCredential +``` + +#### azure.identity.DefaultAzureCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated DefaultAzureCredentialBuilder is returned. +``` + +#### azure.identity.DefaultAzureCredentialBuilder.build + +```text +BUILD Creates new DefaultAzureCredential with the configured options set +``` + +#### azure.identity.DefaultAzureCredentialBuilder.managedIdentityClientId + +```text +MANAGEDIDENTITYCLIENTID Specifies client ID of user or system assigned identity + This credential can be used when in an environment with managed identities. + If unset, the value in the AZURE_CLIENT_ID environment variable will be used. + If neither is set, the default value is null and will only work with system + assigned managed identities and not user assigned managed identities. + An updated DefaultAzureCredentialBuilder is returned. +``` + +#### azure.identity.DefaultAzureCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id of user to authenticate through DefaultAzureCredential + An updated DefaultAzureCredentialBuilder is returned. +``` + +### azure.identity.DeviceCodeCredential + +Superclass: azure.core.credential.TokenCredential + +```text +DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application +``` + +#### azure.identity.DeviceCodeCredential.DeviceCodeCredential + +```text +DEVICECODECREDENTIAL AAD credential acquires token with device code for AAD application +``` + +#### azure.identity.DeviceCodeCredential.authenticate + +```text +AUTHENTICATE Authenticates a user via the device code flow + Can take a azure.core.credential.TokenRequestContext as an optional argument. + Returns a reactor.core.publisher.Mono as a azure.identity.AuthenticationRecord. +``` + +### azure.identity.DeviceCodeCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential. + + The DeviceCodeCredentialBuilder constructor in MATLAB always applies + disableAutomaticAuthentication to avoid any automatic authentication + attempts by clients during which MATLAB will not be able to display the + device code. If a client requires authentication for a certain scope and + your DeviceCodeCredential has not been authenticated for this (yet), an + error will be thrown. + + See: + https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication() +``` + +#### azure.identity.DeviceCodeCredentialBuilder.DeviceCodeCredentialBuilder + +```text +DEVICECODECREDENTIALBUILDER Builder for DeviceCodeCredential. + + The DeviceCodeCredentialBuilder constructor in MATLAB always applies + disableAutomaticAuthentication to avoid any automatic authentication + attempts by clients during which MATLAB will not be able to display the + device code. If a client requires authentication for a certain scope and + your DeviceCodeCredential has not been authenticated for this (yet), an + error will be thrown. + + See: + https://docs.microsoft.com/en-us/java/api/com.azure.identity.devicecodecredentialbuilder.disableautomaticauthentication?view=azure-java-stable#com-azure-identity-devicecodecredentialbuilder-disableautomaticauthentication() +``` + +#### azure.identity.DeviceCodeCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.build + +```text +BUILD Not Supported in MATLAB + + When working with DeviceCodeCredential, MATLAB requires the credential + object to be pre-authorized before passing it to an Azure client. Please + build and also immediately authorize the DeviceCodeCredential using the + 'buildAndAuthenticate' method instead. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.buildAndAuthenticate + +```text +BUILDANDAUTHENTICATE Creates new DeviceCodeCredential with the configured + options set and also immediately authenticates it with the requested + tokenRequestContext. + + By default this method will print the device code information: + + To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code ILOVEMATLAB to authenticate. + + To the MATLAB Command Window. Optionally a function handle + challengeConsumer can be provided to customize the message or how to + display it. This function will be called with a DeviceCodeInfo object as + input. + + An authenticated DeviceCodeCredential is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.disableAutomaticAuthentication + +```text +DISABLEAUTOMATICAUTHENTICATION Disables the automatic authentication and + prevents the DeviceCodeCredential from automatically prompting the user. + If automatic authentication is disabled a AuthenticationRequiredException + will be thrown from getToken(TokenRequestContext request) in the case + that user interaction is necessary. + + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.maxRetry + +```text +MAXRETRY Sets max number of retries when an authentication request fails + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through DeviceCodeCredential + An updated DeviceCodeCredentialBuilder is returned. +``` + +#### azure.identity.DeviceCodeCredentialBuilder.tokenCachePersistenceOptions + +```text +TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +``` + +### azure.identity.DeviceCodeInfo + +Superclass: azure.object + +```text +DEVICECODEINFO Contains details of a device code request. +``` + +#### azure.identity.DeviceCodeInfo.DeviceCodeInfo + +```text +DEVICECODEINFO Contains details of a device code request. +``` + +#### azure.identity.DeviceCodeInfo.getExpiresOn + +```text +GETEXPIRESON Gets the expiration time of device code. + Returns a datetime object. +``` + +#### azure.identity.DeviceCodeInfo.getMessage + +```text +GETMESSAGE Gets the message which should be displayed to the user. + Returns a character vector. +``` + +#### azure.identity.DeviceCodeInfo.getUserCode + +```text +GETUSERCODE Gets the code which user needs to provide when authenticating + at the verification URL. + Returns a character vector. +``` + +#### azure.identity.DeviceCodeInfo.getVerificationUrl + +```text +GETVERIFICATIONURL Gets the URL where user can authenticate. + Returns a character vector. +``` + +### azure.identity.EnvironmentCredential + +Superclass: azure.core.credential.TokenCredential + +```text +ENVIRONMENTCREDENTIAL Provides token credentials based on environment variables + The environment variables expected are: + AZURE_CLIENT_ID + AZURE_CLIENT_SECRET + AZURE_TENANT_ID + or: + AZURE_CLIENT_ID + AZURE_CLIENT_CERTIFICATE_PATH + AZURE_TENANT_ID + or: + AZURE_CLIENT_ID + AZURE_USERNAME + AZURE_PASSWORD +``` + +#### azure.identity.EnvironmentCredential.EnvironmentCredential + +```text +Created using a EnvironmentCredential java object from the + EnvironmentCredential class only +``` + +### azure.identity.EnvironmentCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder +``` + +#### azure.identity.EnvironmentCredentialBuilder.EnvironmentCredentialBuilder + +```text +ENVIRONMENTCREDENTIALBUILDER Builder for EnvironmentCredentialBuilder +``` + +#### azure.identity.EnvironmentCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated EnvironmentCredentialBuilder is returned. +``` + +#### azure.identity.EnvironmentCredentialBuilder.build + +```text +BUILD Creates new EnvironmentCredential with the configured options set +``` + +### azure.identity.InteractiveBrowserCredential + +Superclass: azure.core.credential.TokenCredential + +```text +INTERACTIVEBROWSERCREDENTIAL Prompt the login in the default browser + An AAD credential that acquires a token for an AAD application by prompting + the login in the default browser. + The oauth2 flow will notify the credential of the authentication code through + the reply URL. + The application to authenticate to must have delegated user login permissions + and have http://localhost:{port} listed as a valid reply URL. +``` + +#### azure.identity.InteractiveBrowserCredential.InteractiveBrowserCredential + +```text +Created using a EnvironmentCredential java object from the + EnvironmentCredential class only +``` + +### azure.identity.InteractiveBrowserCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.InteractiveBrowserCredentialBuilder + +```text +INTERACTIVEBROWSERCREDENTIALBUILDER builder for InteractiveBrowserCredential +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.build + +```text +BUILD Creates new InteractiveBrowserCredential with the configured options set +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.redirectUrl + +```text +REDIRECTURL Sets Redirect URL for application with the security code callback +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id of user to authenticate through InteractiveBrowserCredential + An updated InteractiveBrowserCredentialBuilder is returned. +``` + +#### azure.identity.InteractiveBrowserCredentialBuilder.tokenCachePersistenceOptions + +```text +tokenCachePersistenceOptions Sets tokenCachePersistenceOptions. +``` + +### azure.identity.ManagedIdentityCredential + +Superclass: azure.core.credential.TokenCredential + +```text +MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials +``` + +#### azure.identity.ManagedIdentityCredential.ManagedIdentityCredential + +```text +MANAGEDIDENTITYCREDENTIAL Managed Service Identity token based credentials +``` + +#### azure.identity.ManagedIdentityCredential.getClientId + +```text +GETCLIENTID Gets the client ID of user assigned or system assigned identity + The client ID is returned as a character vector. +``` + +### azure.identity.ManagedIdentityCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.ManagedIdentityCredentialBuilder + +```text +MANAGEDIDENTITYCREDENTIALBUILDER Builder for ManagedIdentityCredential +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.build + +```text +BUILD Creates new ManagedIdentityCredential with the configured options set +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated ManagedIdentityCredentialBuilder is returned. +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.maxRetry + +```text +MAXRETRY Sets max number of retries when an authentication request fails +``` + +#### azure.identity.ManagedIdentityCredentialBuilder.resourceId + +```text +RESOURCEID Sets client id + An updated ManagedIdentityCredentialBuilder is returned. +``` + +### azure.identity.SharedTokenCacheCredential + +Superclass: azure.core.credential.TokenCredential + +```text +DEVICECODECREDENTIAL A credential provider that provides token + credentials from the MSAL shared token cache. +``` + +#### azure.identity.SharedTokenCacheCredential.SharedTokenCacheCredential + +```text +DEVICECODECREDENTIAL A credential provider that provides token + credentials from the MSAL shared token cache. +``` + +#### azure.identity.SharedTokenCacheCredential.restFlow + +```text +azure.identity.SharedTokenCacheCredential.restFlow is an undocumented builtin static method or namespace function. +``` + +#### azure.identity.SharedTokenCacheCredential.restGetSas + +```text +azure.identity.SharedTokenCacheCredential.restGetSas is an undocumented builtin static method or namespace function. +``` + +### azure.identity.SharedTokenCacheCredentialBuilder + +Superclass: azure.identity.CredentialBuilderBase + +```text +SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.SharedTokenCacheCredentialBuilder + +```text +SHAREDTOKENCACHECREDENTIALBUILDER Builder for SharedTokenCacheCredential +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.authorityHost + +```text +AUTHORITYHOST Specifies the Azure Active Directory endpoint to acquire tokens + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.build + +```text +BUILD Creates new SharedTokenCacheCredential with the configured options set +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.clientId + +```text +CLIENTID Sets client id + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.tenantId + +```text +TENANTID Sets tenant id to authenticate through SharedTokenCacheCredential + An updated SharedTokenCacheCredentialBuilder is returned. +``` + +#### azure.identity.SharedTokenCacheCredentialBuilder.tokenCachePersistenceOptions + +```text +TOKENCACHEPERSISTENCEOPTIONS Sets tokenCachePersistenceOptions. +``` + +### azure.identity.TokenCachePersistenceOptions + +Superclass: azure.object + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.identity.TokenCachePersistenceOptions.TokenCachePersistenceOptions + +```text +TOKENREQUESTCONTEXT Contains details of a request to get a token + Can be created based on a corresponding com.azure.core.credential.TokenRequestContext + Java object argument or without an argument where further configuration is + required to add scopes. +``` + +#### azure.identity.TokenCachePersistenceOptions.getName + +```text +GETNAME Get the name. + Returns a character vector. +``` + +#### azure.identity.TokenCachePersistenceOptions.setName + +```text +SETNAME Set the name. + Returns an updated azure.core.identity.TokenCachePersistenceOptions. +``` + +### azure.mathworks + +### azure.mathworks.internal + +### azure.mathworks.internal.compareAuthEnvVars + +```text +COMPAREAUTHENVVARS Checks matching Java & MATLAB authentication env. variables + This is a useful sanity check that variables exist in both contexts. + The following variables are tested: + AZURE_CLIENT_ID + AZURE_CLIENT_SECRET + AZURE_TENANT_ID + AZURE_CLIENT_CERTIFICATE_PATH + AZURE_USERNAME + AZURE_PASSWORD + + A variable no set in either context does not return a false. + A logical is returned. +``` + +### azure.mathworks.internal.datetime2OffsetDateTime + +```text +DATETIME2OFFSETDATETIME Converts a MATLAB datetime to a Java + OffsetDateTime in UTC. Ideally the input MATLAB datetime has a specific + timezone set already. If no timezone is set, local is assumed. +``` + +### azure.mathworks.internal.int64FnHandler + +```text +int64FnHandler Invokes Java method to convert a Java long to a string and then an int64 + An int64 is returned. +``` + +### azure.security + +### azure.security.keyvault + +### azure.security.keyvault.keys + +### azure.security.keyvault.keys.models + +### azure.security.keyvault.keys.models.DeletedKey + +Superclass: azure.security.keyvault.keys.models.KeyVaultKey + +```text +DELETEDKEY Deleted Key is the resource consisting of name, recovery + id, deleted date, scheduled purge date and its attributes inherited + from KeyVaultKey. It is managed by Key Service. + + DeletedKey follows the Azure KeyVault Java SDK design, meaning that + DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like + getKey and getName. It appears however that some of those methods do + not actually return a value for deleted keys and it even appears to + depend on how the DeletedKey was obtained. A DeletedKey obtained + through getDeletedKey *does* appear to return a name when calling + getName whereas DeletedKey obtained through listDeletedKeys does + *not*. These are all behaviors of the underlying Azure KeyVault Java + SDK and not MATLAB specific behaviors. + + In that sense, to determine the name of a deleted key, it appears the + best option is to call getRecoveryId and parse the name from the URI + this returns. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.DeletedKey + +```text +DELETEDKEY Deleted Key is the resource consisting of name, recovery + id, deleted date, scheduled purge date and its attributes inherited + from KeyVaultKey. It is managed by Key Service. + + DeletedKey follows the Azure KeyVault Java SDK design, meaning that + DeletedKey inherits from KeyVaultKey, giving DeletedKey methods like + getKey and getName. It appears however that some of those methods do + not actually return a value for deleted keys and it even appears to + depend on how the DeletedKey was obtained. A DeletedKey obtained + through getDeletedKey *does* appear to return a name when calling + getName whereas DeletedKey obtained through listDeletedKeys does + *not*. These are all behaviors of the underlying Azure KeyVault Java + SDK and not MATLAB specific behaviors. + + In that sense, to determine the name of a deleted key, it appears the + best option is to call getRecoveryId and parse the name from the URI + this returns. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getDeletedOn + +```text +GETDELETEDON Get the deleted UTC time. + A datetime object is returned. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getRecoveryId + +```text +GETRECOVERYID Get the recoveryId identifier. + The URI is returned as character array. +``` + +#### azure.security.keyvault.keys.models.DeletedKey.getScheduledPurgeDate + +```text +GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. + A datetime object is returned. +``` + +### azure.security.keyvault.keys.models.JsonWebKey + +Superclass: azure.object + +```text +JSONWEBKEY Key as per http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18 + This can be used an intermediate format for converting to other key types or + for extracting elements of a key. + + Example: + key = keyClient.getKey('myKeyName'); + % Return as a jsonWebKey and test if valid + jsonWebKey = key.getKey(); + tf = jsonWebKey.isValid); + % Convert to an RSA key + keyRsa = jsonWebKey.toRsa(false); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.JsonWebKey + +```text +Create a logger object +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.clearMemory + +```text +CLEARMEMORY Clears key materials in the underlying Java SDK +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.getId + +```text +GETID Get the kid value + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.getKeyType + +```text +GETKEYTYPE Get the kty value + A azure.security.keyvault.keys.models.KeyType is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.hasPrivateKey + +```text +HASPRIVATEKEY Verifies whether the JsonWebKey has a private key or not + A logical is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.isValid + +```text +ISVALID Verifies whether the JsonWebKey is valid + A logical is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toAes + +```text +TOAES Converts JSON web key to AES key + A key of type javax.crypto.SecretKey is returned. + + Example: + key = keyClient.getKey('myKeyName'); + jsonWebKey = key.getKey(); + keyAes = jsonWebKey.toAes(); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toEc + +```text +TOEC Converts JSON web key to EC key pair & optionally include the private key + Include private key if includePrivateParameters set to true + A key pair of type java.security.KeyPair is returned. +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toRsa + +```text +TORSA Converts JSON web key to RSA key pair + Include private key if includePrivateParameters set to true + A key pair of type java.security.KeyPair is returned. + + Example: + key = keyClient.getKey('myKeyName'); + % Return as a jsonWebKey + jsonWebKey = key.getKey(); + % Convert to an RSA key + keyRsa = jsonWebKey.toRsa(false); +``` + +#### azure.security.keyvault.keys.models.JsonWebKey.toString + +```text +TOSTRING Return as a character vector +``` + +### azure.security.keyvault.keys.models.KeyProperties + +Superclass: azure.object + +```text +KEYPROPERTIES Contains the properties of the secret except its value + + Example + keyClient = createKeyVaultClient('Type','Key'); + propList = keyClient.listPropertiesOfKeys(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.keys.models.KeyProperties.KeyProperties + +```text +KEYPROPERTIES Contains the properties of the secret except its value + + Example + keyClient = createKeyVaultClient('Type','Key'); + propList = keyClient.listPropertiesOfKeys(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getId + +```text +GETID Get the secret identifier + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getKeyId + +```text +GETKEYID Get the keyId identifier + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getName + +```text +GETNAME Get the key name + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyProperties.getVersion + +```text +GETVERSION Get the key version + A character vector is returned. +``` + +### azure.security.keyvault.keys.models.KeyType + +```text +KEYTYPE Defines enumeration values for KeyType + Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM +``` + +```text +Enumeration values: + EC + EC_HSM + OCT + OCT_HSM + RSA + RSA_HSM + +``` + +#### azure.security.keyvault.keys.models.KeyType.KeyType + +```text +KEYTYPE Defines enumeration values for KeyType + Values are EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM +``` + +#### azure.security.keyvault.keys.models.KeyType.fromString + +```text +FROMSTRING Creates or finds a KeyType from its string representation + A azure.security.keyvault.keys.models.KeyType is returned. + Input may be a character vector or scalar string. + Input is not case sensitive. + Accepted values are: EC, EC_HSM, OCT, OCT_HSM, RSA & RSA_HSM. + This is a static method. +``` + +#### azure.security.keyvault.keys.models.KeyType.toJava + +```text +TOJAVA Converts to a com.azure.security.keyvault.keys.models.KeyType Java object +``` + +#### azure.security.keyvault.keys.models.KeyType.toString + +```text +TOSTRING Returns text form of a azure.security.keyvault.keys.models.KeyType + A character vector is returned. +``` + +### azure.security.keyvault.keys.models.KeyVaultKey + +Superclass: azure.object + +```text +KEYVAULTSECRET KeyVaultKey class + Creates a azure.security.keyvault.keys.models.KeyVaultKey object. + A com.azure.security.keyvault.keys.models.KeyVaultKey java object is a required + input argument. A number of methods return KeyVaultKey objects. + + Example + % Get a KeyVaultKey object + key = keyClient.getKey('myKeyName'); + keyType = key.getKeyType(); + jsonWebKey = key.getKey(); +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.KeyVaultKey + +```text +Create a logger object +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getId + +```text +GETID Returns the ID value of the key + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getKey + +```text +GETKEY Get the public part of the latest version of the key + A azure.security.keyvault.keys.models.JsonWebKey is returned + + Example: + jsonWebKey = key.getKey(); +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getKeyType + +```text +GETKEYTYPE Returns the type of a key + Returns a azure.security.keyvault.keys.models.KeyType +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getName + +```text +GETNAME Returns the key name + A character vector is returned. +``` + +#### azure.security.keyvault.keys.models.KeyVaultKey.getProperties + +```text +GETPROPERTIES Get the key properties + A azure.security.keyvault.keys.models.KeyProperties is returned. +``` + +### azure.security.keyvault.keys.KeyClient + +Superclass: azure.object + +```text +KEYCLIENT A KeyClient object for transacting keys with the Key Vault + + Example: + % Create a client using the createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials + keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + keyClient = createKeyVaultClient('Type','Key'); + + Or + + % Alternatively a client can also be created manually to + % Configure the logger level and message prefix if not already configured + initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Create a client builder object, a KeyClient in this case + builder = azure.security.keyvault.keys.KeyClientBuilder(); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + keyClient = builder.buildClient(); +``` + +#### azure.security.keyvault.keys.KeyClient.KeyClient + +```text +KEYCLIENT A KeyClient object for transacting keys with the Key Vault + + Example: + % Create a client using the createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials + keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + keyClient = createKeyVaultClient('Type','Key'); + + Or + + % Alternatively a client can also be created manually to + % Configure the logger level and message prefix if not already configured + initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Create a client builder object, a KeyClient in this case + builder = azure.security.keyvault.keys.KeyClientBuilder(); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + keyClient = builder.buildClient(); +``` + +#### azure.security.keyvault.keys.KeyClient.beginDeleteKey + +```text +BEGINDELETESECRET Deletes a key by name from Key Vault + A azure.core.util.polling.syncPoller is returned. + For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller + keyName can be provided as a scalar character vector or string. + + Example: + key = keyClient.getKey('myKeyName'); + syncPoller = keyClient.beginDeleteKey('myKeyName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available, e.g. cancelOperation() +``` + +#### azure.security.keyvault.keys.KeyClient.beginRecoverDeletedKey + +```text +BEGINRECOVERDELETEDKEY Recovers the deleted key in the key vault to its + latest version and can only be performed on a soft-delete enabled vault. + A azure.core.util.polling.syncPoller is returned. + For details see: matlab-azure-common/Software/MATLAB/app/system/+azure/+core/+util/+polling/@SyncPoller + keyName can be provided as a scalar character vector or string. + + Example: + syncPoller = keyClient.beginRecoverDeletedKey('myKeyName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available, e.g. cancelOperation() +``` + +#### azure.security.keyvault.keys.KeyClient.createKey + +```text +CREATEKEY Creates a new key and stores it in the key vault + A key name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.KeyType is provided as an argument + to indicate which type of key to create. + An azure.security.keyvault.keys.models.KeyVaultKey is returned. + + Example: + % Create a client + keyClient = createKeyVaultClient('Type','Key'); + % Create a key type, in this case RSA + rsaKeyType = azure.security.keyvault.keys.models.KeyType.RSA; + % Create the key + key = KeyClient.createKey('myKeyName', rsaKeyType); +``` + +#### azure.security.keyvault.keys.KeyClient.getDeletedKey + +```text +GETDELETEDKEY Gets the public part of a deleted key. + The name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.DeletedKey is returned. + + Example: + key = keyClient.getDeletedKey('myKeyName'); +``` + +#### azure.security.keyvault.keys.KeyClient.getKey + +```text +GETKEY Get the public part of the latest version of the specified key + The name argument is provided as a character vector or scalar string. + A azure.security.keyvault.keys.models.KeyVaultKey is returned. + + Example: + key = keyClient.getKey('myKeyName'); +``` + +#### azure.security.keyvault.keys.KeyClient.getVaultUrl + +```text +GETVAULTURL Gets the vault endpoint url to which service requests are sent to + A character vector is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +#### azure.security.keyvault.keys.KeyClient.listDeletedKeys + +```text +LISTDELETEDKEYS Lists deleted keys of the key vault. + Properties are returned as an array of + azure.security.keyvault.keys.models.DeletedKey objects. + If there are no keys an empty array is returned. + + Example + % Get a list the key properties + deletedKeys = keyClient.listDeletedKeys(); +``` + +#### azure.security.keyvault.keys.KeyClient.listPropertiesOfKeys + +```text +LISTPROPERTIESOFKEYS Lists keys in the key vault + Properties are returned as an array of + azure.security.keyvault.keys.models.KeyProperties objects. + If there are no keys an empty array is returned. + + Example + % Get a list the key properties + keyProperties = keyClient.listPropertiesOfKeys(); + % Look at some of the data returned i.e. the key name + propList(1).getName(); +``` + +#### azure.security.keyvault.keys.KeyClient.purgeDeletedKey + +```text +PURGEDELETEDKEY Permanently deletes the specified key without the + possibility of recovery. The Purge Deleted Key operation is applicable + for soft-delete enabled vaults. This operation requires the keys/purge + permission. + The name argument is provided as a character vector or scalar string. + The function throws an error if no deleted key can be found. Returns + nothing upon success. + + Example: + keyClient.purgeDeletedKey('myKeyName'); +``` + +### azure.security.keyvault.keys.KeyClientBuilder + +Superclass: azure.object + +```text +KEYCLIENTBUILDER Builder for KeyClient object + Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder + object as an argument to create a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.KeyClientBuilder + +```text +KEYCLIENTBUILDER Builder for KeyClient object + Can optionally accept a Java com.azure.security.keyvault.keys.KeyClientBuilder + object as an argument to create a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.buildClient + +```text +BUILDCLIENT Creates a KeyClient based on options configured in the builder +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.credential + +```text +CREDENTIAL Sets the credentials used to authorize a client's requests + An updated builder object is returned. + + Example: + configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); + credentials = configureCredentials(configFilePath); + builder = builder.credential(credentials); +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. Other options may be added + in the future. An updated builder object is returned. + This method will apply http proxy settings if defined in MATLAB Web preferences. +``` + +#### azure.security.keyvault.keys.KeyClientBuilder.vaultUrl + +```text +VAULTURL Sets the vault URL to send HTTP requests to + vaultUrl should be of type character vector or scalar string. + An updated builder object is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +### azure.security.keyvault.secrets + +### azure.security.keyvault.secrets.models + +### azure.security.keyvault.secrets.models.DeletedSecret + +Superclass: azure.security.keyvault.secrets.models.KeyVaultSecret + +```text +DELETEDSECRET Deleted Secret is the resource consisting of name, + recovery id, deleted date, scheduled purge date and its attributes + inherited from KeyVaultSecret. It is managed by Secret Service. + + DeletedSecret follows the Azure KeyVault Java SDK design, meaning + that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret + methods like getValue. It appears however that this method does not + actually return a value for deleted secrets. These are all behaviors + of the underlying Azure KeyVault Java SDK and not MATLAB specific + behaviors. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.DeletedSecret + +```text +DELETEDSECRET Deleted Secret is the resource consisting of name, + recovery id, deleted date, scheduled purge date and its attributes + inherited from KeyVaultSecret. It is managed by Secret Service. + + DeletedSecret follows the Azure KeyVault Java SDK design, meaning + that DeletedSecret inherits from KeyVaultSecret, giving DeletedSecret + methods like getValue. It appears however that this method does not + actually return a value for deleted secrets. These are all behaviors + of the underlying Azure KeyVault Java SDK and not MATLAB specific + behaviors. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getDeletedOn + +```text +GETDELETEDON Get the deleted UTC time. + A datetime object is returned. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getRecoveryId + +```text +GETRECOVERYID Get the recoveryId identifier. + The URI is returned as character array. +``` + +#### azure.security.keyvault.secrets.models.DeletedSecret.getScheduledPurgeDate + +```text +GETSCHEDULEDPURGEDATE Get the scheduled purge UTC time. + A datetime object is returned. +``` + +### azure.security.keyvault.secrets.models.KeyVaultSecret + +Superclass: azure.object + +```text +KEYVAULTSECRET Class to provide access to the KeyVaultSecret object + Creates a azure.security.keyvault.secrets.models.KeyVaultSecret object. + A KeyVaultSecret can be created from a name and value or an equivalent Java + object. A number of methods return KeyVaultSecret objects. + + + Example + % Get a KeyVaultSecret object + secret = secretClient.getSecret('mySecretName'); + value = secret.getValue(); + + Or + + secret = azure.security.keyvault.secrets.models.KeyVaultSecret(secretName, secretValue); + + Or + + secret = azure.security.keyvault.secrets.models.KeyVaultSecret(javaKeyVaultSecret); +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.KeyVaultSecret + +```text +Create a logger object +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getId + +```text +GETID Returns the ID value of the secret + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getName + +```text +GETNAME Returns the name of the secret + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getProperties + +```text +GETPROPERTIES Get the secret properties + A azure.security.keyvault.secrets.models.SecretProperties is returned. +``` + +#### azure.security.keyvault.secrets.models.KeyVaultSecret.getValue + +```text +GETVALUE Returns the secret value + A character vector is returned. + + Example: + sc = createKeyVaultClient('Type','Secret'); + secret = sc.getSecret('mySecretName'); + secretValue = secret.getValue(); +``` + +### azure.security.keyvault.secrets.models.SecretProperties + +Superclass: azure.object + +```text +SECRETPROPERTIES Contains the properties of the secret but not its value + + Example: + secretClient = createKeyVaultClient('Type','Secret'); + propList = secretClient.listPropertiesOfSecrets(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.SecretProperties + +```text +SECRETPROPERTIES Contains the properties of the secret but not its value + + Example: + secretClient = createKeyVaultClient('Type','Secret'); + propList = secretClient.listPropertiesOfSecrets(); + % Look at a name in a returned property + name = propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getId + +```text +GETID Get the secret identifier + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getKeyId + +```text +GETKEYID Get the keyId identifier + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getName + +```text +GETNAME Get the secret name + A character vector is returned. +``` + +#### azure.security.keyvault.secrets.models.SecretProperties.getVersion + +```text +GETVERSION Get the keyId identifier + A character vector is returned. +``` + +### azure.security.keyvault.secrets.SecretClient + +Superclass: azure.object + +```text +SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault + + Example + % Create a Secret client using the higher-level createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials: + secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + secretClient = createKeyVaultClient('Type','Secret'); + + Or + + % Alternatively a client can also be created manually using the builder for + % this class: + % Create a client builder object, a SecretClient in this case + builder = azure.security.keyvault.secrets.SecretClientBuilder(); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + secretClient = builder.buildClient(); +``` + +#### azure.security.keyvault.secrets.SecretClient.SecretClient + +```text +SECRETCLIENT A SecretClient object for transacting secrets with the Key Vault + + Example + % Create a Secret client using the higher-level createKeyVaultClient() function + % Here an optional non default configuration file path is provided that holds + % Client Secret style credentials: + secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') + + Or + + % If a configuration file path is not provided *createKeyVaultClient()* will search + % MATLAB path for a configuration file named ```keyvaultsettings.json```: + secretClient = createKeyVaultClient('Type','Secret'); + + Or + + % Alternatively a client can also be created manually using the builder for + % this class: + % Create a client builder object, a SecretClient in this case + builder = azure.security.keyvault.secrets.SecretClientBuilder(); + + % Configure a credentials object based on a JSON config file + credentials = configureCredentials(which('keyvaultsettings.json')); + + % Configure the builder using its methods + builder = builder.credential(credentials); + builder = builder.httpClient(); + settings = loadConfigurationSettings(which('keyvaultsettings.json')); + builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + + % Create the client + secretClient = builder.buildClient(); +``` + +#### azure.security.keyvault.secrets.SecretClient.beginDeleteSecret + +```text +BEGINDELETESECRET Deletes a secret by name from Key Vault + A azure.core.util.polling.syncPoller is returned. + keyName can be provided as a scalar character vector or string. + + Example: + secret = secretClient.getSecret('mySecretName'); + syncPoller = secretClient.beginDeleteSecret('mySecretName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available +``` + +#### azure.security.keyvault.secrets.SecretClient.beginRecoverDeletedSecret + +```text +BEGINRECOVERDELETEDSECRET Recovers the deleted secret in the key vault to + its latest version. Can only be performed on a soft-delete enabled vault. + This operation requires the secrets/recover permission. + A azure.core.util.polling.syncPoller is returned. + secretName can be provided as a scalar character vector or string. + + Example: + syncPoller = secretClient.beginRecoverDeletedSecret('myDeletedSecretName'); + % Block until completion, allow a 10 second timeout + syncPoller.waitForCompletion(10); + % Other syncPoller methods are available +``` + +#### azure.security.keyvault.secrets.SecretClient.getDeletedSecret + +```text +GETDELETEDSECRET Gets a secret that has been deleted for a soft-delete enabled key vault. + The name can be provided as a scalar character vector or string. + An exception is thrown is a secret does not exist otherwise a + azure.security.keyvault.secrets.models.DeletedSecret is returned. + + Example + deletedSecret = secretClient.getDeletedSecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.getSecret + +```text +GETSECRETS Returns the secret value of the specific secret by name + The name can be provided as a scalar character vector or string. + An exception is thrown is a secret does not exist otherwise a + azure.security.keyvault.secrets.models.KeyVaultSecret is returned. + + Example + secret = secretClient.getsecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.getVaultUrl + +```text +GETVAULTURL Gets the vault endpoint url to which service requests are sent to + A character vector is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +#### azure.security.keyvault.secrets.SecretClient.listDeletedSecrets + +```text +LISTDELETEDSECRETS Lists deleted secrets of the key vault if it has + enabled soft-delete. This operation requires the secrets/list permission. + Properties are returned as an array of + azure.security.keyvault.secrets.models.DeletedSecret objects. + If there are no secrets an empty array is returned. + + Example: + % Get a list of the deleted secrets + deletedSecrets = secretClient.listDeletedSecrets(); + % Look at some of the data returned i.e. the secret name + deletedSecrets(1).getName(); +``` + +#### azure.security.keyvault.secrets.SecretClient.listPropertiesOfSecrets + +```text +LISTPROPERTIESOFSECRETS Lists secrets in the key vault + Properties are returned as an array of + azure.security.keyvault.secrets.models.SecretProperties objects. + If there are no secrets an empty array is returned. + + Example: + % Get a list the secret properties + secretProperties = secretClient.listPropertiesOfSecrets(); + % Look at some of the data returned i.e. the secret name + propList(1).getName(); +``` + +#### azure.security.keyvault.secrets.SecretClient.purgeDeletedSecret + +```text +PURGEDELETEDSECRET Permanently removes a deleted secret, without the + possibility of recovery. This operation can only be performed on a + soft-delete enabled vault. This operation requires the secrets/purge + permission. + + Throws an error on failure, does not return anything at all upon success. + + Example + secretClient.purgeDeletedSecret('mySecretName'); +``` + +#### azure.security.keyvault.secrets.SecretClient.setSecret + +```text +SETSECRETS Creates a secrets using a name and value + This method returns an azure.security.keyvault.secrets.KeyVaultSecret + object. secretName and secretValue can be provided as character vectors or + scalar strings. + + Example: + % Create a SecretClient object + sc = createKeyVaultClient('Type','Secret'); + % Set the secret name and its value to Azure KeyVault + keyVaultSecret = sc.setSecret(secretName, secretValue); +``` + +### azure.security.keyvault.secrets.SecretClientBuilder + +Superclass: azure.object + +```text +SECRETCLIENTBUILDER builder for SecretClient + Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder + object as an argument to build a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.SecretClientBuilder + +```text +SECRETCLIENTBUILDER builder for SecretClient + Can optionally accept a Java com.azure.security.keyvault.secrets.SecretClientBuilder + object as an argument to build a MATLAB builder from the Java builder. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.buildClient + +```text +BUILDCLIENT Creates a SecretClient based on options configured in the builder +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.credential + +```text +CREDENTIAL Sets the credentials used to authorize a client's requests + An updated builder object is returned. + + Example: + configFilePath = fullfile(AzureCommonRoot, 'config', 'ClientSecret.json'); + credentials = configureCredentials(configFilePath); + builder = builder.credential(credentials); +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. Other options may be added + in the future. An updated builder object is returned. + This method will apply http proxy settings if defined in MATLAB Web preferences. +``` + +#### azure.security.keyvault.secrets.SecretClientBuilder.vaultUrl + +```text +VAULTURL Sets the vault URL to send HTTP requests to + The vaultUrl should be of type character vector or scalar string. + An updated builder object is returned. + A URL has the form: https://.vault.azure.net/ + The vaultUrl can optionally be stored in the package's JSON configuration file. +``` + +### azure.storage + +### azure.storage.blob + +### azure.storage.blob.models + +### azure.storage.blob.models.BlobContainerItem + +Superclass: azure.object + +```text +BLOBCONTAINERITEM An Azure Storage container +``` + +#### azure.storage.blob.models.BlobContainerItem.BlobContainerItem + +```text +BLOBCONTAINERITEM An Azure Storage container +``` + +#### azure.storage.blob.models.BlobContainerItem.getName + +```text +GETNAME Returns the container's name as a character vector +``` + +### azure.storage.blob.models.BlobItem + +Superclass: azure.object + +```text +BlobItem +``` + +#### azure.storage.blob.models.BlobItem.BlobItem + +```text +BlobItem +``` + +#### azure.storage.blob.models.BlobItem.getMetadata + +```text +GETMETADATA Get the metadata property +``` + +#### azure.storage.blob.models.BlobItem.getName + +```text +GETNAME Returns the blob's name as a character vector +``` + +#### azure.storage.blob.models.BlobItem.getProperties + +```text +GETPROPERTIES Get the properties property +``` + +#### azure.storage.blob.models.BlobItem.getSnapshot + +```text +GETSNAPSHOT Returns the blob's snapshot property as a character vector +``` + +#### azure.storage.blob.models.BlobItem.getTags + +```text +GETTAGS Get the tags property +``` + +#### azure.storage.blob.models.BlobItem.getVersionId + +```text +GETVERSIONID Returns the blob's versionId property as a character vector +``` + +#### azure.storage.blob.models.BlobItem.isDeleted + +```text +isDeleted Get the deleted property, returns a logical +``` + +#### azure.storage.blob.models.BlobItem.isPrefix + +```text +ISPREFIX Get the isPrefix property: If blobs are named to mimic a directory hierarchy +``` + +### azure.storage.blob.models.BlobItemProperties + +Superclass: azure.object + +```text +BlobItemProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobItemProperties.BlobItemProperties + +```text +BlobItemProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobItemProperties.getCacheControl + +```text +GETCACHECONTROL Get the cacheControl property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentEncoding + +```text +GETCONTENTENCODING Get the getContentEncoding property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentLanguage + +```text +GETCONTENTLANGUAGE Get the getContentLanguage property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentLength + +```text +GETCONTENTLENGTH Get the contentType property +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentMd5 + +```text +GETCONTENTMD5 Get the getContentMd5 property + Return the base64 value shown in the Azure portal +``` + +#### azure.storage.blob.models.BlobItemProperties.getContentType + +```text +GETCONTENTTYPE Get the getContentType property +``` + +### azure.storage.blob.models.BlobListDetails + +Superclass: azure.object + +```text +BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs +``` + +#### azure.storage.blob.models.BlobListDetails.BlobListDetails + +```text +BLOBLISTDETAILS Allows users to specify additional information the service should return with each blob when listing blobs +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveCopy + +```text +GETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobs + +```text +GETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveDeletedBlobsWithVersions + +```text +GETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveImmutabilityPolicy + +```text +GETRETRIEVEIMMUTABILITYPOLICY Whether immutability policy for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveLegalHold + +```text +GETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveMetadata + +```text +GETRETRIEVEMETADATA Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveSnapshots + +```text +GETRETRIEVESNAPSHOTS Whether snapshots should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveTags + +```text +GETRETRIEVETAGS Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveUncommittedBlobs + +```text +GETRETRIEVEUNCOMMITTEDBLOBS Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.getRetrieveVersions + +```text +GETRETRIEVEVERSIONS Whether versions should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveCopy + +```text +SETRETRIEVECOPY Whether blob metadata related to any current or previous Copy Blob operation should be included in the response +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobs + +```text +SETRETRIEVEDELETEDBLOBS Whether blobs which have been soft deleted should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveDeletedBlobsWithVersions + +```text +SETRETRIEVEDELETEDBLOBSWITHVERSIONS Whether blobs which have been deleted with versioning should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveImmutabilityPolicy + +```text +SETRETRIEVEIMMUTABILITYPOLICY Whether blobs which have been deleted with versioning should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveLegalHold + +```text +SETRETRIEVELEGALHOLD Whether legal hold for the blob should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveMetadata + +```text +SETRETRIEVEMETADATA Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveSnapshots + +```text +setRetrieveSnapshots Whether snapshots should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveTags + +```text +setRetrieveTags Whether blob tags should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveUncommittedBlobs + +```text +SETRETRIEVEUNCOMMITTEDBLOBS Whether blob metadata should be returned +``` + +#### azure.storage.blob.models.BlobListDetails.setRetrieveVersions + +```text +SETRETRIEVEUNCOMMITTEDBLOBS Whether versions should be returned +``` + +### azure.storage.blob.models.BlobProperties + +Superclass: azure.object + +```text +BlobProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobProperties.BlobProperties + +```text +BlobProperties Properties of a blob +``` + +#### azure.storage.blob.models.BlobProperties.getBlobSize + +```text +GETBLOBSIZE Gets the size of the blob in bytes + An int64 is returned. +``` + +#### azure.storage.blob.models.BlobProperties.getCacheControl + +```text +GETCACHECONTROL Get the the cache control of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentEncoding + +```text +GETCONTENTENCODING Get the content encoding of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentLanguage + +```text +GETCONTENTLANGUAGE Get the content language of the blob +``` + +#### azure.storage.blob.models.BlobProperties.getContentMd5 + +```text +GETCONTENTMD5 Get the MD5 of the blob's content + Return the base64 value shown in the Azure portal +``` + +#### azure.storage.blob.models.BlobProperties.getContentType + +```text +GETCONTENTTYPE Get the content type of the blob +``` + +### azure.storage.blob.models.ListBlobsOptions + +Superclass: azure.object + +```text +LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient +``` + +#### azure.storage.blob.models.ListBlobsOptions.ListBlobsOptions + +```text +LISTBLOBSOPTIONS Defines options available to configure the behavior of a call to listBlobs on a BlobContainerClient +``` + +#### azure.storage.blob.models.ListBlobsOptions.getDetails + +```text +GETDETAILS Returns a BlobListDetails object +``` + +#### azure.storage.blob.models.ListBlobsOptions.getMaxResultsPerPage + +```text +GETDETAILS Returns the maximum number of blobs to return, including all BlobPrefix elements + A double is returned. + An empty [] is returned if not set. +``` + +#### azure.storage.blob.models.ListBlobsOptions.getPrefix + +```text +GETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +``` + +#### azure.storage.blob.models.ListBlobsOptions.setDetails + +```text +SETDETAILS Returns a ListBlobsOptions object +``` + +#### azure.storage.blob.models.ListBlobsOptions.setMaxResultsPerPage + +```text +SETDETAILS Returns a ListBlobsOptions object +``` + +#### azure.storage.blob.models.ListBlobsOptions.setPrefix + +```text +SETPREFIX Filters the results to return only blobs whose names begin with the specified prefix +``` + +### azure.storage.blob.models.StorageAccountInfo + +Superclass: azure.object + +```text +STORAGEACCOUNTINFO Holds information related to the storage account + Currently only constructing an object based on and existing java object of + type StorageAccountInfo is supported. +``` + +#### azure.storage.blob.models.StorageAccountInfo.StorageAccountInfo + +```text +STORAGEACCOUNTINFO Holds information related to the storage account + Currently only constructing an object based on and existing java object of + type StorageAccountInfo is supported. +``` + +#### azure.storage.blob.models.StorageAccountInfo.getAccountKind + +```text +GETACCOUNTKIND Describes the type of the storage account + Values: BLOB_STORAGE, BLOCK_BLOB_STORAGE, FILE_STORAGE, STORAGE, STORAGE_V2 + A character vector is returned rather than an enumeration +``` + +### azure.storage.blob.models.UserDelegationKey + +Superclass: azure.object + +```text +USERDELEGATIONKEY A user delegation key. +``` + +#### azure.storage.blob.models.UserDelegationKey.UserDelegationKey + +```text +USERDELEGATIONKEY A user delegation key. +``` + +#### azure.storage.blob.models.UserDelegationKey.getSignedExpiry + +```text +GETSIGNEDEXPIRY Get the signedExpiry property: The date-time + the key expires. +``` + +#### azure.storage.blob.models.UserDelegationKey.getSignedStart + +```text +GETSIGNEDSTART Get the signedStart property: The date-time the + key is active. +``` + +### azure.storage.blob.sas + +### azure.storage.blob.sas.BlobContainerSasPermission + +Superclass: azure.object + +```text +BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.BlobContainerSasPermission + +```text +BLOBCONTAINERSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.parse + +```text +PARSE Creates a BlobContainerSasPermission from the specified permissions string + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, c, w, or d. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setListPermission + +```text +SETLISTPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobContainerSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobContainerSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.blob.sas.BlobSasPermission + +Superclass: azure.object + +```text +BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobSasPermission.BlobSasPermission + +```text +BLOBSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a BlobSasSignatureValues + object +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.blob.sas.BlobSasPermission.parse + +```text +PARSE Creates a BlobSasPermission from the specified permissions string + A azure.storage.blob.sas.BlobSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, c, w, or d. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.blob.sas.BlobSasPermission object is returned. +``` + +#### azure.storage.blob.sas.BlobSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.blob.sas.BlobServiceSasSignatureValues + +Superclass: azure.object + +```text +BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.blob.sas.BlobSasPermission or + BlobContainerSasPermission +``` + +#### azure.storage.blob.sas.BlobServiceSasSignatureValues.BlobServiceSasSignatureValues + +```text +BLOBSERVICESASSIGNATUREVALUES Used to initialize a SAS for a Blob service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + bsssv = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.blob.sas.BlobSasPermission or + BlobContainerSasPermission +``` + +### azure.storage.blob.specialized + +### azure.storage.blob.specialized.BlobLeaseClient + +Superclass: azure.object + +```text +BLOBLEASECLIENT This class provides a client that contains all the + leasing operations for BlobContainerClient and BlobClient. This client + acts as a supplement to those clients and only handles leasing + operations. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.BlobLeaseClient + +```text +BLOBLEASECLIENT This class provides a client that contains all the + leasing operations for BlobContainerClient and BlobClient. This client + acts as a supplement to those clients and only handles leasing + operations. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.acquireLease + +```text +ACQUIRELEASE Acquires a lease for write and delete + operations. The lease duration must be between 15 to 60 + seconds or -1 for an infinite duration. + + Returns the lease ID. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.breakLease + +```text +BREAKLEASE Breaks the previously acquired lease, if it + exists. + + Returns the remaining time in the broken lease in seconds. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.changeLease + +```text +CHANGELEASE Changes the lease ID. + + Returns the new lease ID. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.getLeaseId + +```text +GETLEASEID Get the lease ID for this lease. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.getResourceUrl + +```text +GETRESOURCEURL Gets the URL of the lease client. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.releaseLease + +```text +RELEASELEASE Releases the previously acquired lease. +``` + +#### azure.storage.blob.specialized.BlobLeaseClient.renewLease + +```text +RENEWLEASE Renews the previously acquired lease. + + Returns the renewed lease ID. +``` + +### azure.storage.blob.specialized.BlobLeaseClientBuilder + +Superclass: azure.object + +```text +BLOBCLIENTBUILDER This class provides a fluent builder API to help aid + the configuration and instantiation of Storage Lease clients. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.BlobLeaseClientBuilder + +```text +BLOBCLIENTBUILDER This class provides a fluent builder API to help aid + the configuration and instantiation of Storage Lease clients. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.blobClient + +```text +BLOBCLIENT Configures the builder based on the passed + BlobClient. This will set the HttpPipeline and URL that are + used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobLeaseClient based on the + configurations set in the builder. + + Returns a BlobLeaseClient based on the configurations in this + builder. +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.containerClient + +```text +CONTAINERCLIENT Configures the builder based on the passed + BlobContainerClient. This will set the HttpPipeline and URL + that are used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +#### azure.storage.blob.specialized.BlobLeaseClientBuilder.leaseId + +```text +CONTAINERCLIENT Configures the builder based on the passed + BlobContainerClient. This will set the HttpPipeline and URL + that are used to interact with the service. + + Returns the updated BlobLeaseClientBuilder object +``` + +### azure.storage.blob.BlobClient + +Superclass: azure.object + +```text +BLOBCLIENT Client performs generic blob operations +``` + +#### azure.storage.blob.BlobClient.BlobClient + +```text +BLOBCLIENT Client performs generic blob operations +``` + +#### azure.storage.blob.BlobClient.copyFromUrl + +```text +COPYFROMURL Copies the data at the source URL to a blob + The call waits for the copy to complete before returning a response. + A copyId is returned as a character vector it can apply for certain long + running operations. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. +``` + +#### azure.storage.blob.BlobClient.delete + +```text +DELETE BlobClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + Blobs on Azure. To delete the Azure Blob use the deleteBlob + method in MATLAB. +``` + +#### azure.storage.blob.BlobClient.deleteBlob + +```text +DELETEBLOB Deletes the blob - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteBlob. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + client.deleteBlob('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +``` + +#### azure.storage.blob.BlobClient.downloadToFile + +```text +DOWNLOADTOFILE Downloads the entire blob into a file specified by filePath + To overwrite an existing file use a parameter 'overwrite' and a logical true. + By default a file is not overwritten. + + Example: + blobClient.downloadToFile('/mydir/myfile.txt', 'overwrite', true); +``` + +#### azure.storage.blob.BlobClient.exists + +```text +EXISTS Gets if the blob this client represents exists in Azure + A logical is returned if the Container exists indicating if the blob + exists or not. Otherwise an exception is thrown, for example if the + container does not exist. Consider using a container client to check for + the existance of the container first. +``` + +#### azure.storage.blob.BlobClient.generateSas + +```text +GENERATESAS Generates a SAS for the blob + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.generateUserDelegationSas + +```text +GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the + blob using the specified BlobServiceSasSignatureValues and + UserDelegationKey. The UserDelegationKey can be obtained through the + getUserDelegationKey method of a BlobServiceClient. + + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobClient.getBlobUrl + +```text +GETBLOBURL Gets the URL of the blob represented by this client + The URL is returned as a character vector. +``` + +#### azure.storage.blob.BlobClient.getContainerClient + +```text +GETCONTAINERCLIENT Gets a client pointing to the parent container. +``` + +#### azure.storage.blob.BlobClient.getProperties + +```text +GETPROPERTIES Returns the blob's metadata and properties +``` + +#### azure.storage.blob.BlobClient.uploadFromFile + +```text +UPLOADFROMFILE Creates a or updates a block blob To overwrite an + existing blob use a parameter 'overwrite' and a logical true. By + default a blob is not overwritten. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + blobClient.uploadFromFile('/mydir/myfile.txt',... + 'overwrite', true,... + 'leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797'); +``` + +### azure.storage.blob.BlobClientBuilder + +Superclass: azure.object + +```text +BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients +``` + +#### azure.storage.blob.BlobClientBuilder.BlobClientBuilder + +```text +BLOBCLIENTBUILDER Aids the configuration and instantiation of BlobClients +``` + +#### azure.storage.blob.BlobClientBuilder.blobName + +```text +BLOBNAME Sets the name of the blob + blobName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobClient based on options set in the builder + A built BlobClient object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.containerName + +```text +CONTAINERNAME Sets the name of the container that contains the blob + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobClientBuilder.setAnonymousAccess + +```text +SETANONYMOUSACCESS Clears the credential used to authorize the request + An updated builder object is returned. +``` + +### azure.storage.blob.BlobContainerClient + +Superclass: azure.object + +```text +BLOBCONTAINERCLIENT Client to a container +``` + +#### azure.storage.blob.BlobContainerClient.BlobContainerClient + +```text +BLOBCONTAINERCLIENT Client to a container +``` + +#### azure.storage.blob.BlobContainerClient.create + +```text +CREATE Creates a new container within a storage account +``` + +#### azure.storage.blob.BlobContainerClient.delete + +```text +DELETE BlobContainerClient destructor - in MATLAB delete is a + reserved method name for the class destructor. This method + does not delete Blob Containers on Azure. To delete the Azure + Blob Container use the deleteContainer method in MATLAB. +``` + +#### azure.storage.blob.BlobContainerClient.deleteContainer + +```text +DELETECONTAINER Deletes the container - this is the equivalent of the + "delete" method in the Azure Java API but because "delete" is a + reserved method name in MATLAB, the method is named DELETECONTAINER. + + If a lease is active on the blob, parameter 'leaseId' and the + actual lease id as value can be provided. + + Example: + client.deleteContainer('leaseId','f6eb8bda-cf33-4da1-8e50-11d1a6dd8797') +``` + +#### azure.storage.blob.BlobContainerClient.exists + +```text +EXISTS Tests if the container this client represents exists in Azure + A logical is returned. +``` + +#### azure.storage.blob.BlobContainerClient.generateUserDelegationSas + +```text +GENERATEUSERDELEGATIONSAS Generates a user delegation SAS for the + container using the specified BlobServiceSasSignatureValues and + UserDelegationKey. The UserDelegationKey can be obtained through the + getUserDelegationKey method of a BlobServiceClient. + + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobContainerClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getAccountUrl + +```text +GETACCOUNTURL Get associated account URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobClient + +```text +GETBLOBCLIENT Initializes a new BlobClient object + blobName should be a scalar string or character vector. + A BlobClient is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobContainerName + +```text +GETCONTAINERNAME Get the container name + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getBlobContainerUrl + +```text +GETBLOBCONTAINERURL Get associated container URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobContainerClient.getServiceClient + +```text +GETSERVICECLIENT Get a client pointing to the account. +``` + +#### azure.storage.blob.BlobContainerClient.listBlobs + +```text +LISTBLOBS Returns a list of blobs in this container + Folder structures are flattened. + An array of BlobItems is returned. +``` + +#### azure.storage.blob.BlobContainerClient.listBlobsByHierarchy + +```text +LISTBLOBSBYHIERARCHY Returns the blobs and directories (prefixes) under the given directory (prefix). + Directories will have BlobItem.isPrefix() set to true. + Blob names are returned in lexicographic order. + An array of BlobItems is returned. +``` + +### azure.storage.blob.BlobContainerClientBuilder + +Superclass: azure.object + +```text +BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients +``` + +#### azure.storage.blob.BlobContainerClientBuilder.BlobContainerClientBuilder + +```text +BLOBCONTAINERCLIENTBUILDER Aids construction of BlobContinerClients +``` + +#### azure.storage.blob.BlobContainerClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobContainerClient based on options set in the builder + A built BlobContainerClient object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.containerName + +```text +CONTAINERNAME Sets the name of the container + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.endpoint + +```text +ENDPOINT Sets the blob container endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobContainerClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.blob.BlobServiceClient + +Superclass: azure.object + +```text +BLOBSERVICECLIENT +``` + +#### azure.storage.blob.BlobServiceClient.BlobServiceClient + +```text +BLOBSERVICECLIENT +``` + +#### azure.storage.blob.BlobServiceClient.createBlobContainer + +```text +CREATEBLOBCONTAINER Creates a new container within a storage account + If a container with the same name already exists, the operation fails. + The name of the container to create should be passed as a character vector or + scalar string. + If the container already exists an empty azure.storage.blob.BlobContainerClient + is returned otherwise a non empty azure.storage.blob.BlobContainerClient is + returned. + In verbose logging mode a message is logged. +``` + +#### azure.storage.blob.BlobServiceClient.deleteBlobContainer + +```text +DELETEBLOBCONTAINER Deletes the specified container in the storage account + The name of the container to create should be passed as a character vector or + scalar string. +``` + +#### azure.storage.blob.BlobServiceClient.generateAccountSas + +```text +GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountInfo + +```text +GETACCOUNTINFO Returns the sku name and account kind for the account + A StorageAccountInfo object is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getAccountUrl + +```text +GETACCOUNTURL Get associated account URL + A character vector is returned. +``` + +#### azure.storage.blob.BlobServiceClient.getUserDelegationKey + +```text +GETUSERDELEGATIONKEY Gets a user delegation key for use with this + account's blob storage. + + Note: This method call is only valid when using TokenCredential. I.e. not + when working with ConnectionString or StorageSharedKey authentication + approaches. + + The function takes two datetime objects as input, the start and expiry + time of the key's validity. + + Returns a UserDelegationKey object. + + Example: + + key = sc.getUserDelegationKey(datetime('now'),datetime('now')+hours(1)) +``` + +#### azure.storage.blob.BlobServiceClient.listBlobContainers + +```text +LISTBLOBCONTAINERS +``` + +#### azure.storage.blob.BlobServiceClient.setAnonymousAccess + +```text +SETANONYMOUSACCESS Clears the credential used to authorize the request + An updated builder object is returned. +``` + +### azure.storage.blob.BlobServiceClientBuilder + +Superclass: azure.object + +```text +BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients +``` + +#### azure.storage.blob.BlobServiceClientBuilder.BlobServiceClientBuilder + +```text +BLOBSERVICECLIENTBUILDER Aids construction of BlobServiceClients +``` + +#### azure.storage.blob.BlobServiceClientBuilder.buildClient + +```text +BUILDCLIENT Creates a BlobServiceClient based on options set in the builder + A built BlobServiceClient object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.endpoint + +```text +ENDPOINT Sets the blob service endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.retryOptions + +```text +RETRYOPTIONS Sets request retry options for all requests made through the client + retryOptions may be either a com.azure.storage.common.policy.RequestRetryOptions + or a azure.storage.common.policy.RequestRetryOptions object. + An updated azure.storage.blob.BlobServiceClientBuilder object is returned. +``` + +#### azure.storage.blob.BlobServiceClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.common + +### azure.storage.common.policy + +### azure.storage.common.policy.RequestRetryOptions + +Superclass: azure.object + +```text +REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory + The default constructor azure.storage.common.policy.RequestRetryOptions() returns an + object with retry values: + + retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional + A RetryPolicyType specifying the type of retry pattern + to use, default value is EXPONENTIAL + + maxTries: Optional int32 + Maximum number of attempts an operation will be retried + default is 4 + + tryTimeoutInSeconds: Optional int32 + Specifies the maximum time allowed before a request is + cancelled and assumed failed, default is intmax s + + retryDelayInMs: Optional int64 + Specifies the amount of delay to use before retrying an + operation, default value is 4ms + + maxRetryDelayInMs: Optional int64 + Specifies the maximum delay allowed before retrying an + operation, default value is 120ms + + secondaryHost: Optional character vector or scalar string +``` + +#### azure.storage.common.policy.RequestRetryOptions.RequestRetryOptions + +```text +REQUESTRETRYOPTIONS Options for configuring the RequestRetryFactory + The default constructor azure.storage.common.policy.RequestRetryOptions() returns an + object with retry values: + + retryPolicyType: Optional azure.storage.common.policy.RetryPolicyType Optional + A RetryPolicyType specifying the type of retry pattern + to use, default value is EXPONENTIAL + + maxTries: Optional int32 + Maximum number of attempts an operation will be retried + default is 4 + + tryTimeoutInSeconds: Optional int32 + Specifies the maximum time allowed before a request is + cancelled and assumed failed, default is intmax s + + retryDelayInMs: Optional int64 + Specifies the amount of delay to use before retrying an + operation, default value is 4ms + + maxRetryDelayInMs: Optional int64 + Specifies the maximum delay allowed before retrying an + operation, default value is 120ms + + secondaryHost: Optional character vector or scalar string +``` + +### azure.storage.common.policy.RetryPolicyType + +```text +RetryPolicyType Defines holds possible options for retry backoff algorithms + They may be used with RequestRetryOptions. + Values are EXPONENTIAL & FIXED +``` + +```text +Enumeration values: + EXPONENTIAL + FIXED + +``` + +#### azure.storage.common.policy.RetryPolicyType.RetryPolicyType + +```text +RetryPolicyType Defines holds possible options for retry backoff algorithms + They may be used with RequestRetryOptions. + Values are EXPONENTIAL & FIXED +``` + +#### azure.storage.common.policy.RetryPolicyType.toJava + +```text +TOJAVA Converts to a com.azure.storage.common.policy.RetryPolicyType Java object +``` + +#### azure.storage.common.policy.RetryPolicyType.toString + +```text +TOSTRING Returns text form of a RetryPolicyType + A character vector is returned. +``` + +#### azure.storage.common.policy.RetryPolicyType.valueOf + +```text +VALUEOF Returns the enum constant of this type with the specified name +``` + +### azure.storage.common.sas + +### azure.storage.common.sas.AccountSasPermission + +Superclass: azure.object + +```text +ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on an AccountSasSignatureValues + object +``` + +#### azure.storage.common.sas.AccountSasPermission.AccountSasPermission + +```text +ACCOUNTSASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on an AccountSasSignatureValues + object +``` + +#### azure.storage.common.sas.AccountSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasProcessMessages + +```text +HASPROCESSMESSAGES Returns the process messages permission + This allows the retrieval and deletion of queue messages. + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasUpdatePermission + +```text +HASUPDATEPERMISSION Returns the update permission status + It allows the update of queue message and tables. + This allows the retrieval and deletion of queue messages. + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.common.sas.AccountSasPermission.parse + +```text +PARSE Creates an AccountSasPermission from the specified permissions string + A azure.storage.common.sas.AccountSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, w, d, l, a, c, u, or p. +``` + +#### azure.storage.common.sas.AccountSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setListPermission + +```text +SETLISTPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setProcessMessages + +```text +SETPROCESSMESSAGES Sets the process messages permission + This allows the retrieval and deletion of queue messages. + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setUpdatePermission + +```text +SETUPDATEPERMISSION Sets the update permission status + This allows the update of queue messages and tables. + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.common.sas.AccountSasPermission object is returned. +``` + +#### azure.storage.common.sas.AccountSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasResourceType + +Superclass: azure.object + +```text +ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that resource type. + Once the required values are set serialize the object with toString for use + as the resources field on an AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasResourceType.AccountSasResourceType + +```text +ACCOUNTSASRESOURCETYPE Construct string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that resource type. + Once the required values are set serialize the object with toString for use + as the resources field on an AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasResourceType.isContainer + +```text +ISCONTAINER Returns true if the resource is a Container otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.isObject + +```text +ISOBJECT Returns true if the resource is an object otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.isService + +```text +ISSERVICE Returns true if the resource is a Service otherwise false +``` + +#### azure.storage.common.sas.AccountSasResourceType.parse + +```text +PARSE Creates an AccountSasResourceType from the specified permissions string + Creates an AccountSasResourceType from the specified resource types string. + Throws an IllegalArgumentException if passed a character that does not + correspond to a valid resource type. + Expected characters are s, c, or o. + A azure.storage.common.sas.AccountSasResourceType object is returned. + resourceTypesString should be of type scalar string or character vector. + This is a static method. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setContainer + +```text +SETCONTAINER Sets the access status for container level APIs + Grants access to Blob Containers, Tables, Queues, and File Shares. + The container argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType object is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setObject + +```text +SETOBJECT Sets the access status for object level APIs + Grants access to Blobs, Table Entities, Queue Messages, Files. + The object argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType object is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.setService + +```text +SETSERVICE Sets the access status for service level APIs + The service argument should be of type logical. + A azure.storage.common.sas.AccountSasResourceType service is returned. +``` + +#### azure.storage.common.sas.AccountSasResourceType.toString + +```text +TOSTRING Converts the given permissions to a String + This method is used to serialize an AccountSasResourceType + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasService + +Superclass: azure.object + +```text +ACCOUNTSASSERVICE Construct a string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that service. Once required values are set the object should + be serialized with toString and set as the services field on an + AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasService.AccountSasService + +```text +ACCOUNTSASSERVICE Construct a string representing the Account SAS services + Setting a value to true means that any SAS which uses these permissions will + grant access to that service. Once required values are set the object should + be serialized with toString and set as the services field on an + AccountSasSignatureValues object. +``` + +#### azure.storage.common.sas.AccountSasService.hasBlobAccess + +```text +HASBLOBACCESS Returns the access status for blob resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasFileAccess + +```text +HASFILEACCESS Returns the access status for file resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasQueueAccess + +```text +HASQUEUEACCESS Returns the access status for queue resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.hasTableAccess + +```text +HASTABLEACCESS Returns the access status for table resources + The result is returned as a logical +``` + +#### azure.storage.common.sas.AccountSasService.parse + +```text +PARSE Creates an AccountSasService from the specified permissions string + A azure.storage.common.sas.AccountSasService object is returned. + servicesString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid service. + Expected characters are b, f, q, or t. + This is a static method. +``` + +#### azure.storage.common.sas.AccountSasService.setBlobAccess + +```text +SETBLOBACCESS Sets the access status for blob resources + The blob argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setFileAccess + +```text +SETFILEACCESS Sets the access status for file resources + The file argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setQueueAccess + +```text +SETQUEUEACCESS Sets the access status for queue resources + The queue argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.setTableAccess + +```text +SETTABLEACCESS Sets the access status for table resources + The table argument should be of type logical. + A azure.storage.common.sas.AccountSasService object is returned. +``` + +#### azure.storage.common.sas.AccountSasService.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.common.sas.AccountSasSignatureValues + +Superclass: azure.object + +```text +ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + assv = azure.storage.common.sas.AccountSasSignatureValues( ... + expiryTime, permissions, services, resourceTypes); + + Argument types: + expiryTime: datetime + permissions: azure.storage.common.sas.AccountSasPermission + services: azure.storage.common.sas.AccountSasService + resourceTypes: azure.storage.common.sas.AccountSasResourceType +``` + +#### azure.storage.common.sas.AccountSasSignatureValues.AccountSasSignatureValues + +```text +ACCOUNTSASSIGNATUREVALUES Used to initialize a SAS for a storage account + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + assv = azure.storage.common.sas.AccountSasSignatureValues( ... + expiryTime, permissions, services, resourceTypes); + + Argument types: + expiryTime: datetime + permissions: azure.storage.common.sas.AccountSasPermission + services: azure.storage.common.sas.AccountSasService + resourceTypes: azure.storage.common.sas.AccountSasResourceType +``` + +### azure.storage.common.StorageSharedKeyCredential + +Superclass: azure.object + +```text +STORAGESHAREDKEYCREDENTIAL SharedKey credential policy + Used to put into a header to authorize requests. +``` + +#### azure.storage.common.StorageSharedKeyCredential.StorageSharedKeyCredential + +```text +STORAGESHAREDKEYCREDENTIAL SharedKey credential policy + Used to put into a header to authorize requests. +``` + +#### azure.storage.common.StorageSharedKeyCredential.getAccountName + +```text +GETACCOUNTNAME Gets the account name associated with the request + The accountName is returned as a character vector. +``` + +### azure.storage.file + +### azure.storage.file.datalake + +### azure.storage.file.datalake.models + +### azure.storage.file.datalake.models.PathItem + +Superclass: azure.object + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathItem.PathItem + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathItem.getName + +```text +GETNAME Get the name property + A character vector is returned. +``` + +#### azure.storage.file.datalake.models.PathItem.isDirectory + +```text +ISDIRECTORY Get the isDirectory property + A logical is returned. +``` + +### azure.storage.file.datalake.models.PathProperties + +Superclass: azure.object + +```text +Copyright 2022 The MathWorks, Inc. +``` + +#### azure.storage.file.datalake.models.PathProperties.PathProperties + +```text +Copyright 2022 The MathWorks, Inc. +``` + +### azure.storage.file.datalake.sas + +### azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues + +Superclass: azure.object + +```text +DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.file.datalake.sas.PathSasPermission or + FileSystemSasPermission + Or + + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier); + + Argument types: + identifier: Creates an object with the specified identifier. + NOTE: Identifier can not be used for a UserDelegationKey SAS. + Type character vector or scalar string. +``` + +#### azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues.DataLakeServiceSasSignatureValues + +```text +DATALAKESERVICESASSIGNATUREVALUES Used to initialize a SAS for Data Lake Storage + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime ideally with defined TimeZone to avoid any + confusion, if TimeZone is not set, 'local' is assumed + permissions: azure.storage.file.datalake.sas.PathSasPermission or + FileSystemSasPermission + Or + + dlsssv = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(identifier); + + Argument types: + identifier: Creates an object with the specified identifier. + NOTE: Identifier can not be used for a UserDelegationKey SAS. + Type character vector or scalar string. +``` + +### azure.storage.file.datalake.sas.FileSystemSasPermission + +Superclass: azure.object + +```text +FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.FileSystemSasPermission + +```text +FILESYSTEMSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasExecutePermission + +```text +HASEXECUTEPERMISSION Returns the execute permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageAccessControlPermission + +```text +HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasManageOwnershipPermission + +```text +HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasMovePermission + +```text +HASMOVEPERMISSION Returns the move permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.parse + +```text +PARSE Creates a FileSystemSasPermission from the specified permissions string + A azure.storage.file.datalake.sas.FileSystemPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setExecutePermission + +```text +SETEXECUTEPERMISSION Sets the execute permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setListPermission + +```text +SETADDPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setManageAccessControlPermission + +```text +SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setManageOwnershipPermission + +```text +SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setMovePermission + +```text +SETMOVEPERMISSION Sets the move permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setReadPermission + +```text +SETCREATEPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.FileSystemSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.FileSystemSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.file.datalake.sas.PathSasPermission + +Superclass: azure.object + +```text +PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.PathSasPermission + +```text +PATHSASPERMISSION Constructs a string of permissions granted by ServiceSAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasCreatePermission + +```text +HASCREATEPERMISSION Returns the create permission status + The result is returned as a logical +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasDeletePermission + +```text +HASDELETEPERMISSION Returns the delete permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasExecutePermission + +```text +HASEXECUTEPERMISSION Returns the execute permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasListPermission + +```text +HASLISTPERMISSION Returns the list permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasManageAccessControlPermission + +```text +HASMANAGEACCESSCONTROLPERMISSION Returns the manage access control permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasManageOwnershipPermission + +```text +HASMANAGEOWNERSHIPPERMISSION Returns the manage ownership permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasMovePermission + +```text +HASMOVEPERMISSION Returns the move permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.hasWritePermission + +```text +HASWRITEPERMISSION Returns the write permission status + The result is returned as a logical. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.parse + +```text +PARSE Creates a PathSasPermission from the specified permissions string + A azure.storage.file.datalake.sas.PathSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setCreatePermission + +```text +SETCREATEPERMISSION Sets the create permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setDeletePermission + +```text +SETDELETEPERMISSION Sets the delete permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setExecutePermission + +```text +SETEXECUTEPERMISSION Sets the execute permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setListPermission + +```text +SETADDPERMISSION Sets the list permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setManageAccessControlPermission + +```text +SETMANAGEACCESSCONTROLPERMISSION Sets the manage access control permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setManageOwnershipPermission + +```text +SETMANAGEOWNERSHIPPERMISSION Sets the manage ownership permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setMovePermission + +```text +SETMOVEPERMISSION Sets the move permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.setWritePermission + +```text +SETWRITEPERMISSION Sets the write permission status + The permission argument should be of type logical. + A azure.storage.file.datalake.sas.PathSasPermission object is returned. +``` + +#### azure.storage.file.datalake.sas.PathSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.file.datalake.DataLakeDirectoryClient + +Superclass: azure.object + +```text +DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.DataLakeDirectoryClient + +```text +DATALAKEDIRECTORYCLIENT Client that contains directory operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.createFile + +```text +CREATEFILE Creates a new file within a directory + By default, this method will not overwrite an existing file. + To enable overwrite set an overwrite argument to true. + A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.delete + +```text +DELETE DataLakeDirectoryClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteDirectory + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteDirectory + +```text +DELETEDIRECTORY Deletes the directory - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteDirectory. + + Example: + client.deleteDirectory() +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile('myfile.txt') +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.deleteSubdirectory + +```text +DELETESUBDIRECTORY Deletes the specified sub-directory in the directory + If the sub-directory doesn't exist or is not empty the operation fails. + subdirectoryName is provided as a character vector or scalar string. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.exists + +```text +EXISTS Gets if the path this client represents exists in Azure + This does not guarantee that the path type (file/directory) matches expectations. + E.g. a DataLakeFileClient representing a path to a datalake directory will + return true, and vice versa. + A logical is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryPath + +```text +GETDIRECTORYPATH Gets the path of this file, not including the name of the resource itself + A character vector is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getDirectoryUrl + +```text +GETDIRECTORYURL Gets the URL of the directory represented by this client + A matlab.net.URI is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.getFileClient + +```text +GETFILECLIENT Create a DataLakeFileClient concatenating fileName to the DataLakeDirectoryClient +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.listPaths + +```text +LISTPATHS Returns a list of files/directories in this account + Paths are returned as an array of + azure.storage.file.datalake.models.PathItem objects. + If there are no keys an empty array is returned. +``` + +#### azure.storage.file.datalake.DataLakeDirectoryClient.rename + +```text +RENAME Moves the directory to another location within the file system + Arguments must be scalar strings or character vectors. + + destinationFileSystem is the file system of the destination within the account. + Use an empty array [] to use the current file system. + + destinationPath Relative path from the file system to rename the directory to. + This excludes the file system name, e.g. to move a directory with: + fileSystem = "myfilesystem", path = "mydir/mysubdir" + to another path in myfilesystem e.g.: newdir then set the destinationPath to "newdir" + + A DataLakeDirectoryClient used to interact with the newly created directory is returned. +``` + +### azure.storage.file.datalake.DataLakeFileClient + +Superclass: azure.object + +```text +DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder or retrieved via + getFileClient(). +``` + +#### azure.storage.file.datalake.DataLakeFileClient.DataLakeFileClient + +```text +DATALAKEFILECLIENT Client that contains file operations for Azure Storage Data Lake + This client is instantiated through DataLakePathClientBuilder or retrieved via + getFileClient(). +``` + +#### azure.storage.file.datalake.DataLakeFileClient.delete + +```text +DELETE DataLakeFileClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteFile + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile() +``` + +#### azure.storage.file.datalake.DataLakeFileClient.exists + +```text +EXISTS Gets if the path this client represents exists in Azure + This does not guarantee that the path type (file/directory) matches expectations. + E.g. a DataLakeFileClient representing a path to a datalake directory will + return true, and vice versa. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.getFilePath + +```text +GETFILEPATH Gets the path of this file, not including the name of the resource itself + A character vector is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.getFileUrl + +```text +GETFILEURL Gets the URL of the file represented by this client + A matlab.net.URI is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.readToFile + +```text +READTOFILE Reads the entire file into a file specified by the path + By default a file will not be overwritten and if the file already exists a + FileAlreadyExistsException Java will be thrown. A logical overwrite flag + can be optionally provided. + An azure.storage.file.datalake.models.PathProperties is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.rename + +```text +RENAME Moves the file to another location within the file system + Arguments must be scalar strings or character vectors. + + destinationFileSystem is the file system of the destination within the account. + Use a string or character vector of zero length for the current file system. + + destinationPath is the relative path from the file system to rename the file to. + This excludes the file system name, e.g. to move a file with: + fileSystem = "myfilesystem", path = "mydir/hello.txt" + to another path in myfilesystem e.g.: newdir/hi.txt + then set the destinationPath = "newdir/hi.txt" + + A DataLakeFileClient used to interact with the newly created file is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileClient.uploadFromFile + +```text +UPLOADFROMFILE Creates a file with the content of the specified file + By default, this method will not overwrite an existing file. + filePath is provided as a character vector or scalar string. +``` + +### azure.storage.file.datalake.DataLakeFileSystemClient + +Superclass: azure.object + +```text +DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations + This client is instantiated through DataLakeFileSystemClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.DataLakeFileSystemClient + +```text +DATALAKEFILEFILESYSTEMCLIENT Client that contains file system operations + This client is instantiated through DataLakeFileSystemClientBuilder +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.createDirectory + +```text +CREATEDIRECTORY Creates a new directory within a file system + By default, this method will not overwrite an existing directory. + To enable overwrite set an overwrite argument to true. + A azure.storage.file.datalake.DataLakeDirectoryClient is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.delete + +```text +DELETE DataLakeFileSystemClient destructor - in MATLAB delete is a reserved + method name for the class destructor. This method does not delete + files on Azure. To delete the Azure files use the deleteFileSystem + method in MATLAB. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.deleteDirectory + +```text +DELETEDIRECTORY Deletes the specified directory + + Example: + client.deleteDirectory('myDirectory') +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.deleteFile + +```text +DELETEFILE Deletes the file - this is the equivalent of the "delete" + method in the Azure Java API but because "delete" is a reserved + method name in MATLAB, the method is named deleteFile. + + Example: + client.deleteFile('myfile.txt') +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.generateSas + +```text +GENERATESAS Generates a SAS for the blob + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClient.listPaths + +```text +LISTPATHS Returns a list of files/directories in this account + Paths are returned as an array of + azure.storage.file.datalake.models.PathItem objects. + If there are no keys an empty array is returned. +``` + +### azure.storage.file.datalake.DataLakeFileSystemClientBuilder + +Superclass: azure.object + +```text +DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.DataLakeFileSystemClientBuilder + +```text +DATALAKEFILESYSTEMCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileSystemClient +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.buildClient + +```text +BUILDFILESYSTEMCLIENT Creates a DataLakeFileSystemClient based on the builder + Returns a DataLakeFileSystemClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.fileSystemName + +```text +FILESYSTEMNAME Sets the name of the file/directory + If the path name contains special characters, pass in the url encoded version + of the path name. + A azure.storage.file.datalake.DataLakeFileSystemClientBuilder is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakeFileSystemClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests sent to the service + This string should only be the query parameters (with or without a leading + '?') and not a full url. + An updated builder is returned. +``` + +### azure.storage.file.datalake.DataLakePathClientBuilder + +Superclass: azure.object + +```text +DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.DataLakePathClientBuilder + +```text +DATALAKEPATHCLIENTBUILDER Aids the configuration and instantiation of DataLakeFileClient +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.buildDirectoryClient + +```text +BUILDDIRECTORYCLIENT Creates a DataLakeDirectoryClient based on the builder + Returns a buildDirectoryClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.buildFileClient + +```text +BUILDFILECLIENT Creates a DataLakeFileClient based on options set in the builder + Returns a DataLakeFileClient created from the configurations in this builder. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential + or azure.core.credential.TokenCredential. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.fileSystemName + +```text +fileSystemName Sets the name of the file system that contains the path + If the value null or empty the root file system, $root, will be used. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.pathName + +```text +PATHNAME Sets the name of the file/directory + If the path name contains special characters, pass in the url encoded version + of the path name. + An updated builder object is returned. +``` + +#### azure.storage.file.datalake.DataLakePathClientBuilder.sasToken + +```text +SASTOKEN Sets the SAS token used to authorize requests sent to the service + This string should only be the query parameters (with or without a leading + '?') and not a full url. + A azure.storage.file.datalake.DataLakePathClientBuilder is returned. +``` + +### azure.storage.queue + +### azure.storage.queue.models + +### azure.storage.queue.models.PeekedMessageItem + +Superclass: azure.object + +```text +PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue +``` + +#### azure.storage.queue.models.PeekedMessageItem.PeekedMessageItem + +```text +PEEKEDMESSAGEITEM Returned when calling Peek Messages on a queue +``` + +#### azure.storage.queue.models.PeekedMessageItem.getDequeueCount + +```text +GETDEQUEUECOUNT Get the number of times the message has been dequeued + An int64 is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getExpirationTime + +```text +GETEXPIRATIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getMessageId + +```text +GETMESSAGEID Get the Id of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.getMessageText + +```text +GETMESSAGETEXT Get the content of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setDequeueCount + +```text +SETDEQUEUECOUNT Set the DequeueCount property + The DequeueCount may be of type integer + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setExpirationTime + +```text +SETEXPIRATIONTIME The time the Message was inserted into the Queue + Expiration time should be of type datetime with a time zone set. + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setInsertionTime + +```text +SETINSERTIONTIME The time the Message was inserted into the Queue + Insertion time should be of type datetime with a time zone set. + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setMessageId + +```text +SETMESSAGEID Set the messageId property + The messageId may be of type character vector or scalar string + A PeekedMessageItem is returned. +``` + +#### azure.storage.queue.models.PeekedMessageItem.setMessageText + +```text +SETMESSAGETEXT Set the messageId property + The messageText may be of type character vector or scalar string + A PeekedMessageItem is returned. +``` + +### azure.storage.queue.models.QueueItem + +Superclass: azure.object + +```text +QUEUEITEM Azure Storage Queue +``` + +#### azure.storage.queue.models.QueueItem.QueueItem + +```text +QUEUEITEM Azure Storage Queue +``` + +#### azure.storage.queue.models.QueueItem.getName + +```text +GETNAME Returns the queue's name as a character vector +``` + +### azure.storage.queue.models.QueueMessageItem + +Superclass: azure.object + +```text +QUEUEMESSAGEITEM Returned when calling Get Messages on a queue +``` + +#### azure.storage.queue.models.QueueMessageItem.QueueMessageItem + +```text +QUEUEMESSAGEITEM Returned when calling Get Messages on a queue +``` + +#### azure.storage.queue.models.QueueMessageItem.getDequeueCount + +```text +GETDEQUEUECOUNT Get the number of times the message has been dequeued + An int64 is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getExpirationTime + +```text +GETEXPIRATIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.getMessageId + +```text +GETMESSAGEID Get the Id of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getMessageText + +```text +GETMESSAGETEXT Get the content of the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getPopReceipt + +```text +GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.getTimeNextVisible + +```text +GETTIMENEXTVISIBLE Get the timeNextVisible property + The time that the message will again become visible in the Queue. + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.QueueMessageItem.setDequeueCount + +```text +SETDEQUEUECOUNT Set the DequeueCount property + The DequeueCount may be of type integer + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setExpirationTime + +```text +SETEXPIRATIONTIME The time the Message was inserted into the Queue + Expiration time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setInsertionTime + +```text +SETINSERTIONTIME The time the Message was inserted into the Queue + Insertion time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setMessageId + +```text +SETMESSAGEID Set the messageId property + The messageId may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setMessageText + +```text +SETMESSAGETEXT Set the messageId property + The messageText may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setPopReceipt + +```text +SETPOPRECEIPT Set the messageId property + The popReceipt may be of type character vector or scalar string + A QueueMessageItem is returned. +``` + +#### azure.storage.queue.models.QueueMessageItem.setTimeNextVisible + +```text +SETTIMENEXTVISIBLE Set the timeNextVisible property + The time that the message will again become visible in the Queue. + The time should be of type datetime with a time zone set. + A QueueMessageItem is returned. +``` + +### azure.storage.queue.models.QueueProperties + +Superclass: azure.object + +```text +QUEUEPROPERTIES Class containing properties of a specific queue +``` + +#### azure.storage.queue.models.QueueProperties.QueueProperties + +```text +QUEUEPROPERTIES Class containing properties of a specific queue +``` + +#### azure.storage.queue.models.QueueProperties.getApproximateMessageCount + +```text +GETAPPROXIMATEMESSAGECOUNT Gets the approximate number of messages in the queue + Applies at the time of properties retrieval. + An int64 is returned. +``` + +### azure.storage.queue.models.SendMessageResult + +Superclass: azure.object + +```text +SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue +``` + +#### azure.storage.queue.models.SendMessageResult.SendMessageResult + +```text +SENDMESSAGERESULT Returned in the QueueMessageList array when calling Put Message on a Queue +``` + +#### azure.storage.queue.models.SendMessageResult.getExpirationTime + +```text +GETEXPIRATIONTIME Time the Message will expire and be automatically deleted + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.SendMessageResult.getInsertionTime + +```text +GETINSERTIONTIME Get the time the Message was inserted into the queue + A datetime value is returned, with time zone configured for UTC. +``` + +#### azure.storage.queue.models.SendMessageResult.getPopReceipt + +```text +GETPOPRECEIPT Get the popReceipt, this value is required to delete the Message + A character vector is returned. +``` + +#### azure.storage.queue.models.SendMessageResult.getTimeNextVisible + +```text +GETTIMENEXTVISIBLE Get the timeNextVisible property + The time that the message will again become visible in the Queue. + A datetime value is returned, with time zone configured for UTC. +``` + +### azure.storage.queue.sas + +### azure.storage.queue.sas.QueueSasPermission + +Superclass: azure.object + +```text +QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a QueueSasSignatureValues + object +``` + +#### azure.storage.queue.sas.QueueSasPermission.QueueSasPermission + +```text +QUEUESASPERMISSION Constructs a string of permissions granted by Account SAS + Setting a value to true means that any SAS which uses these permissions will + grant permissions for that operation. + Once the required values are set, the object should be serialized with + toString and set as the permissions field on a QueueSasSignatureValues + object +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasAddPermission + +```text +HASADDPERMISSION Returns the add permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasProcessPermission + +```text +HASPROCESSPERMISSION Returns the process permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasReadPermission + +```text +HASREADPERMISSION Returns the read permission status + The result is returned as a logical. +``` + +#### azure.storage.queue.sas.QueueSasPermission.hasUpdatePermission + +```text +HASUPDATEPERMISSION Returns the update permission status + The result is returned as a logical +``` + +#### azure.storage.queue.sas.QueueSasPermission.parse + +```text +PARSE Creates a QueueSasPermission from the specified permissions string + A azure.storage.queue.sas.QueueSasPermission object is returned. + permString should be of type scalar string or character vector. + Throws an IllegalArgumentException if it encounters a character that does + not correspond to a valid permission. + This is a static method. + Expected characters are r, a, u, or p. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setAddPermission + +```text +SETADDPERMISSION Sets the add permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setProcessPermission + +```text +SETPROCESSPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setReadPermission + +```text +SETREADPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.setUpdatePermission + +```text +SETUPDATEPERMISSION Sets the read permission status + The permission argument should be of type logical. + A azure.storage.queue.sas.QueueSasPermission object is returned. +``` + +#### azure.storage.queue.sas.QueueSasPermission.toString + +```text +TOSTRING Converts the given permissions to a String + A character vector is returned. +``` + +### azure.storage.queue.sas.QueueServiceSasSignatureValues + +Superclass: azure.object + +```text +QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime + permissions: azure.storage.queue.sas.QueueSasPermission +``` + +#### azure.storage.queue.sas.QueueServiceSasSignatureValues.QueueServiceSasSignatureValues + +```text +QUEUESERVICESASSIGNATUREVALUES Used to initialize a SAS for a Queue service + When the values are set, use the generateSas method on the desired service + client to obtain a representation of the SAS which can then be applied to a + new client using the .sasToken(String) method on the desired client builder. + + Example + qsssv = azure.storage.queue.sas.QueueServiceSasSignatureValues(expiryTime, permissions); + + Argument types: + expiryTime: datetime + permissions: azure.storage.queue.sas.QueueSasPermission +``` + +### azure.storage.queue.QueueClient + +Superclass: azure.object + +```text +QUEUECLIENT Client performs generic queue operations +``` + +#### azure.storage.queue.QueueClient.QueueClient + +```text +QUEUECLIENT Client performs generic queue operations +``` + +#### azure.storage.queue.QueueClient.clearMessages + +```text +CLEARMESSAGES Deletes all messages in the queue +``` + +#### azure.storage.queue.QueueClient.create + +```text +CREATE Creates a new queue +``` + +#### azure.storage.queue.QueueClient.delete + +```text +DELETE QueueClient destructor - in MATLAB delete is a + reserved method name for the class destructor. This method + does not delete Queues on Azure. To delete the Azure + Queue use the deleteQueue method in MATLAB. +``` + +#### azure.storage.queue.QueueClient.deleteMessage + +```text +DELETEMESSAGE Deletes the specified message from the queue + The messageId and popReceipt arguments should be of type character vector or + scalar string +``` + +#### azure.storage.queue.QueueClient.deleteQueue + +```text +DELETEQUEUE Deletes the queue +``` + +#### azure.storage.queue.QueueClient.generateSas + +```text +GENERATESAS Generates a SAS for the queue + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.queue.QueueClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.getQueueName + +```text +GETQUEUENAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.getQueueUrl + +```text +GETQUEUEURL Get associated URL + A character vector is returned. +``` + +#### azure.storage.queue.QueueClient.peekMessage + +```text +PEEKMESSAGE Peeks the first message in the queue + A peek request retrieves a message from the front of the queue without + changing its visibility. If no message is found an empty double is + returned. +``` + +#### azure.storage.queue.QueueClient.receiveMessage + +```text +RECEIVEMESSAGE Retrieves the first message in the queue + The message is hidden from other operations for 30 seconds. + If no message is found an empty double is returned. +``` + +#### azure.storage.queue.QueueClient.receiveMessages + +```text +RECEIVEMESSAGES Retrieves up to the maximum number of messages from the queue + Messages are hidden from other operations for the timeout period. + + maxMessages + Maximum number of messages to get. + If there are less messages exist in the queue than requested + all the messages will be returned. If left empty only 1 message + will be retrieved, the allowed range is 1 to 32 messages. + + visibilityTimeout - Optional. + The timeout period for how long the message is invisible in + the queue. If left empty the received messages will be + invisible for 30 seconds. The timeout must be between 1 + second and 7 days. + + timeout - Optional. + Timeout applied to the operation. + If a response is not returned before the timeout concludes + a RuntimeException will be thrown. + + context - TODO + + If a any of visibilityTimeout, timeout or context are provided all must be + provided. + + An array of QueueMessageItem is returned. +``` + +#### azure.storage.queue.QueueClient.sendMessage + +```text +SENDMESSAGE Sends a message that has a time-to-live of 7 days + The message is instantly visible. + A SendMessageResult is returned. +``` + +### azure.storage.queue.QueueClientBuilder + +Superclass: azure.object + +```text +QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients +``` + +#### azure.storage.queue.QueueClientBuilder.QueueClientBuilder + +```text +QUEUECLIENTBUILDER Aids the configuration and instantiation of QueueClients +``` + +#### azure.storage.queue.QueueClientBuilder.buildClient + +```text +BUILDCLIENT Creates a QueueClient based on options set in the builder + A built QueueClient object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.queueName + +```text +QUEUENAME Sets the name of the container that contains the queue + containerName should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.storage.queue.QueueServiceClient + +Superclass: azure.object + +```text +QUEUESERVICECLIENT Service client performs generic queue operations +``` + +#### azure.storage.queue.QueueServiceClient.QueueServiceClient + +```text +QUEUESERVICECLIENT Service client performs generic queue operations +``` + +#### azure.storage.queue.QueueServiceClient.createQueue + +```text +CREATEQUEUE Creates a queue in with the specified name + A QueueClient is returned. +``` + +#### azure.storage.queue.QueueServiceClient.deleteQueue + +```text +DELETEQUEUE Deletes a queue in with the specified name +``` + +#### azure.storage.queue.QueueServiceClient.generateAccountSas + +```text +GENERATEACCOUNTSAS Generates an account SAS for the Azure Storage account + The client must be authenticated via StorageSharedKeyCredential + The SAS is returned as a character vector. +``` + +#### azure.storage.queue.QueueServiceClient.getAccountName + +```text +GETACCOUNTNAME Get associated account name + A character vector is returned. +``` + +#### azure.storage.queue.QueueServiceClient.getQueueClient + +```text +GETQUEUECLIENT Constructs a QueueClient that interacts with the specified queue + A QueueClient is returned. +``` + +#### azure.storage.queue.QueueServiceClient.getQueueServiceUrl + +```text +GETQUEUESERVICEURL Gets the URL of the storage queue +``` + +#### azure.storage.queue.QueueServiceClient.listQueues + +```text +Lists all queues in the storage account without their metadata + TODO listQueues probably SDK bug - Only the fist page of queues is + currently listed. +``` + +### azure.storage.queue.QueueServiceClientBuilder + +Superclass: azure.object + +```text +QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients +``` + +#### azure.storage.queue.QueueServiceClientBuilder.QueueServiceClientBuilder + +```text +QUEUESERVICECLIENTBUILDER Aids configuration & instantiation of QueueServiceClients +``` + +#### azure.storage.queue.QueueServiceClientBuilder.buildClient + +```text +BUILDCLIENT Creates a QueueServiceClient based on options set in the builder + A built QueueServiceClient object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.connectionString + +```text +CONNECTIONSTRING Sets the connection string to connect to the service + connectionString should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.credential + +```text +CREDENTIAL Sets the credential used to authorize requests + Credential argument should be of type azure.storage.common.StorageSharedKeyCredential. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.endpoint + +```text +ENDPOINT Sets the client endpoint + The endpoint is also parsed for additional information i.e. the SAS token + endpoint should be of type character vector or scalar string. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.httpClient + +```text +HTTPCLIENT Sets the HttpClient to use for sending a receiving requests + Currently the Netty client is configured by default. + An updated builder object is returned. +``` + +#### azure.storage.queue.QueueServiceClientBuilder.sasToken + +```text +sasToken Sets the SAS token used to authorize requests + sasToken should be of type character vector or scalar string. + An updated builder object is returned. +``` + +### azure.object + +Superclass: dynamicprops + +```text +OBJECT Root Class for all Azure wrapper objects +``` + +#### azure.object.object + +```text +logObj = Logger.getLogger(); + write(logObj,'debug','Creating root object'); +``` + +#### azure.object.setSystemProperties + +```text +azure.object.setSystemProperties is a function. + v = azure.object.setSystemProperties +``` + +### mathworks + +### mathworks.adx + +### mathworks.adx.NullPolicy + +```text +NullPolicy Enumeration used to determine how null values ard handled in MATLAB + + Values: + ErrorAny: Error if any null values are detected + ErrorLogicalInt32Int64: Error if null values are detected for logicals, + int32s or int64s that do not support missing or NaN + AllowAll: All null types to map to missing, NaN or NaT for + all data types + Convert2Double: Convert logicals, int32s, & int64s to doubles +``` + +```text +Enumeration values: + ErrorAny + ErrorLogicalInt32Int64 + AllowAll + Convert2Double + +``` + +#### mathworks.adx.NullPolicy.NullPolicy + +```text +NullPolicy Enumeration used to determine how null values ard handled in MATLAB + + Values: + ErrorAny: Error if any null values are detected + ErrorLogicalInt32Int64: Error if null values are detected for logicals, + int32s or int64s that do not support missing or NaN + AllowAll: All null types to map to missing, NaN or NaT for + all data types + Convert2Double: Convert logicals, int32s, & int64s to doubles +``` + +### mathworks.adx.KQLQuery + +```text +KQLQuery Runs a KQL query + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + cluster: A non default cluster can be specified as a string or character vector. + + bearerToken: Token used to authenticate KQL queries only, overrides JSON + settings file based authentication. Provided as a text scalar. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + useParallel: A logical to enable the use of Parallel Computing Toolbox if + available to improve performance on large queries. + Default is false. Applies to KQL queries only. + See: Documentation/Performance.md for more details. + + parallelThreshold: The number of rows above which a parpool will be started + rather than just working serially, if making a large + query or repeated queries then the overhead caused by + the creation of a parpool should be amortized. + The default is 1000 rows. + + verbose: A logical to enable additional output. Default is false. + + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A logical to indicate if the query succeed or not. + + requestId: The request's ID string in ADX. + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was cancelled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion +``` + +### mathworks.adx.adxRoot + +```text +adxRoot Function to return the root folder for the ADX interface + + ADXRoot alone will return the root for the MATLAB code in the + project. + + ADXRoot with additional arguments will add these to the path + + funDir = mathworks.adx.adxRoot('app', 'functions') + + The special argument of a negative number will move up folders, e.g. + the following call will move up two folders, and then into + Documentation. + + docDir = mathworks.adx.adxRoot(-2, 'Documentation') +``` + +### mathworks.adx.clustersGet + +```text +clustersGet Returns a Cluster object for a given or default Cluster URL + In the case of error a adx.control.models.ErrorResponse is returned + or an error is thrown. + + Example: + % Get a cluster Object for the current default cluster + result = mathworks.adx.clustersGet(); +``` + +### mathworks.adx.createTable + +```text +createTable Creates a table in a given database + The contents of the table are not ingested, only the schema + + Require arguments: + matlabTable : The matlabTable to base Kusto table upon. Type table. + The table need not have content only columns of the + correct types. + tableName : The name of the table to create. Type string. + + Optional arguments: + tableProperties : Key value properties for the table, Type containers.Map. + database : Non default database name. Type string. + cluster : Non default cluster name. Type string. + bearerToken : Non default token value. Type string. + + Returns a logical true and a table describing the created table or a + logical false and a adx.control.models.ErrorResponse or an empty MATLAB Table. + + Example: + + % Create a sample table T + LastName = ["Sanchez";"Johnson";"Li"]; + Age = [int32(38); int32(43); int32(38)]; + Height = [int64(71); int64(69); int64(64)]; + Weight = [176; 163; 131]; + T = table(LastName,Age,Height,Weight); + [tf, result] = mathworks.adx.createTable(T, "health") + + tf = + logical + 1 + result = + 1x5 table + + TableName Schema DatabaseName Folder DocString + _________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ____________ _________ _________ + "health" "{"Name":"health","OrderedColumns":[{"Name":"LastName","Type":"System.String","CslType":"string"},{"Name":"Age","Type":"System.Int32","CslType":"int"},{"Name":"Height","Type":"System.Int64","CslType":"long"},{"Name":"Weight","Type":"System.Double","CslType":"real"}]}" "testdb1" + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/create-table-command +``` + +### mathworks.adx.dropTable + +```text +dropTable Drops a table from a given database + + The .drop table command only soft deletes the data. + Data can't be queried, but is still recoverable from persistent storage. + The underlying storage artifacts are hard-deleted according to the + recoverability property in the retention policy that was in effect at + the time the data was ingested into the table. + + Require argument: + tableName : The name of the table to drop. Type string. + + Optional arguments: + ifExists : If specified and if true the command won't fail if the table + doesn't exist. Type logical. + database : Non default database name. Type string. + cluster : Non default cluster name. Type string. + bearerToken : Non default token value. Type string. + + Returns a table of remaining tables and some properties or an + adx.control.models.ErrorResponse. + + Example: + + result = mathworks.adx.dropTable("TestTable") + result = + 5x4 table + TableName DatabaseName Folder DocString + _________________ ____________ _________ _________ + "airlinesmall" "testdb1" + "airlinesmallcsv" "testdb1" + "itable" "testdb1" + "myparquet" "testdb1" + "outagesTable" "testdb1" + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/drop-table-command +``` + +### mathworks.adx.exportToBlob + +```text +exportToBlob Exports data to an Azure blob + + Required arguments + storageConnectionString: SAS URL for the destination blob + + query: The result of the query is written to a blob. + + Optional arguments + compressed: Logical to indicate if the results should be compressed, default is true + + outputDataFormat: String to indicate the output file format the default is parquet + Supported values are: csv, tsv, json, and parquet. + + database: Database name string, the default is taken from the JSON settings file. + + cluster: Cluster name string, the default is taken from the JSON settings file. + + bearerToken: String containing a specific bearerToken + + Return values + tf: Logical to indicate if the command succeeded. + + Result: On success contains the result of the query on failure contains a + adx.control.models.ErrorResponse + + Example: + exportURL = "https://.blob.core.windows.net/"; + exportURI = matlab.net.URI(exportURL); + SAS = exportURI.EncodedQuery; + query = "table('" + "mytablename" + "', 'all')"; + [tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query); + % Assuming tf == true + downloadURL = result.Path(1) + "?" + SAS; + downloadURI = matlab.net.URI(downloadURL); + % The default export format is parquet + localFile = websave("exportedTable.gz.parquet", downloadURI); + T = parquetread(localFile); + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-export/export-data-to-storage +``` + +### mathworks.adx.ingestFile + +```text +ingestTableQueue Ingests a local file to Azure Data Explorer using Azure blob + + Arguments: + localFile: Path to file to be ingested. + + tableName: Table to ingest the data to. + + Optional arguments: + database: database name, if not specified the database configured in + the json settings file will be used. + + format: Format of the file to be ingested, if not specified the file + extension will be used. + + blobName: Name of the blob to upload to, if not specified a name will be + generated based on the local file. + + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. + + mode: "drop" drop the existing table if it exists before ingesting + "create" create the table if it does not exist + "add" (Default) ingest into an existing table + + Return values: + success: A logical true is returned if a success message is returned. + + result: Tabular output of the command if successful otherwise a + adx.control.models.ErrorResponse + + Example: + % Get filename & path for the outages.parquet file + info = parquetinfo('outages.parquet'); + success = mathworks.adx.ingestFile(info.Filename, 'outagesTable'); + + + Table Exists + ----------------------------------------------------- + | True | False + ----------------------------------------------------- + Mode | | + create | add | create, add + drop | drop, create, add | create add + add (default) | add | error +``` + +### mathworks.adx.ingestFileQueue + +```text +INGESTSINGLEFILE Ingests a local file to Azure Data Explorer using Azure blob & queue + + Arguments: + localFile: Path to file to be ingested. + + Optional named arguments: + database: database name, if not specified the database configured in + the JSON settings file will be used. + format: Format of the file to be ingested, if not specified the file + extension will be used. + blobName: Name of the blob to upload to, if not specified a name will be + generated based on the local file. + cluster: Cluster name, if not specified the database configured in + the JSON settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the JSON settings file will be used. + tableName: Table to ingest the data to, default is ingestedTable- + + Return values + success: A logical true is returned if a success message is returned. + + Example: + % Get filename & path for the outages.parquet file + info = parquetinfo('outages.parquet'); + success = mathworks.adx.ingestFileQueue(info.Filename, 'tableName', 'outagesTable') +``` + +### mathworks.adx.ingestFromQuery + +```text +ingestFromQuery Ingest data using the result of a command or query + + This ingestion method is intended for exploration and prototyping. + Do not use it in production or high-volume scenarios. + + Command If table exists If table doesn't exist + ------------------------------------------------------------------------------------------- + set The command fails The table is created and data is ingested + append Data is appended to the table The command fails + set-or-append Data is appended to the table The table is created and data is ingested + set-or-replace Data replaces the data The table is created and data is ingested + in the table + + Arguments + command One of: set, append, set-or-append or set-or-replace. + Type scalar text. + + tableName Name of the table to ingest into. Type scalar text. + + queryOrCommand Command or query to append to produce the dta to ingest. + Type scalar text. + + Optional named arguments + async Logical to indicate if async mode should be used or not. + Default is false. + + database Non default database name. Type scalar text. + + cluster Non default cluster name. Type scalar text. + + propertyNames One or more supported ingestion properties used + to control the ingestion process. + + propertyValues Property values that correspond the propertyNames, specified + as a cell array. + + scopes Non default scopes value. Type scalar text. + + convertDynamics Logical to determine if dynamic fields are decoded or not. + Default is true. + + nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + allowNullStrings Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is true. + + verbose A logical to enable additional output. Default is true. + + Return values + success A logical to indicate if the query succeed or not. + + result Table containing the primary result or first table of the + command response. If the request failed the result will + be a adx.control.models.ErrorResponse rather than a table. + + requestId The request's ID string in ADX. Type scalar string. + + extentId The unique identifier for the data shard that was generated + by the command. Type scalar string. + + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query +``` + +### mathworks.adx.ingestInline + +```text +ingestInline Ingests limited amounts of data into Kusto directly from MATLAB + + This ingestion method is intended for exploration and prototyping. + Do not use it in production or high-volume scenarios. + + The destination table should exist before calling this function. + + You must have at least Table Ingestor permissions to run this command. + + Arguments + tableName Name of the table to ingest into. Type scalar text. + + ingestData Data to be ingested, must be of formats that are convertible + to Kusto literals and compatible with the destination table + schema. Type cell array, table, primitive variable/array. + + Optional named arguments + tableExistsCheck Check if the table exists before proceeding. Type logical, + default true. + + checkSchema Check that the destination schema is compatible with the + ingest data. Type logical, default true. + + database Non default database name. Type scalar text. + + cluster Non default cluster name. Type scalar text. + + propertyNames One or more supported ingestion properties used + to control the ingestion process. + + propertyValues Property values that correspond the propertyNames, specified + as a cell array. + + scopes Non default scopes value. Type scalar text. + + convertDynamics Logical to determine if dynamic fields are decoded or not. + Default is true. + + nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + allowNullStrings Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is true. + + verbose A logical to enable additional output. Default is true. + + Return values + success A logical to indicate if the query succeed or not. + + result Table containing the primary result or first table of the + command response. If the request failed the result will + be a adx.control.models.ErrorResponse rather than a table. + + requestId The request's ID string in ADX. Type scalar string. + + extentId The unique identifier for the data shard that was generated + by the command. Type scalar string. + + If table existence check and the schema compatibility check fail empty + result, requestId & extentId values are returned along with a logical false + success. + + While not intended for performance sensitive applications disabling the + table existence check and the schema compatibility check where appropriate + using tableExistsCheck and checkSchema respectively. + + Example: + localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); + tableName = "outages"; + ingestData = praquetTable(1,:); + + [success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData) + + success = + logical + 1 + result = + 1x5 table + ExtentId ItemLoaded Duration HasErrors OperationId + ______________________________________ _____________________________________________ ________ _________ ______________________________________ + "8de6b799-6e12-4994-b57b-ed75e15db0a8" "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf" 00:00:00 false "cd4184ca-0d31-4c42-a273-5f2953f76ddf" + requestId = + "63bb1cea-b589-45ac-82ad-00d68ca96aeb" + extentId = + "8de6b799-6e12-4994-b57b-ed75e15db0a8" + + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-inline +``` + +### mathworks.adx.ingestTable + +```text +ingestTable Ingests a MATLAB table to an Azure Data Explorer Table + The table is converted to a temporary local parquet file to facilitate + ingestion. + + Example: + inputTable = parquetread("myfile.parquet"); + [success, result] = mathworks.adx.ingestTable(inputTable, tableName="mytablename") + + Arguments: + T: A MATLAB table + + Options: + tableName: A name for the table, if not specified the tabled will + be named ingestedTable- + database: database name, if not specified the database configured in + the json settings file will be used. + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. + mode: "drop" drop an existing table with the tableName before ingesting + "create" create the table if it does not exist + "add" (Default) ingest into an existing table + verbose: Logical to enable additional feedback, default is true +``` + +### mathworks.adx.ingestTableQueue + +```text +ingestTableQueue Ingests a MATLAB table to an Azure Data Explorer Table + The table is converted to a temporary local parquet file to facilitate + ingestion. + + Arguments: + T: A MATLAB table. + + Optional named arguments: + tableName: A name for the table, if not specified the tabled will + be named ingestedTable- + database: database name, if not specified the database configured in + the json settings file will be used. + cluster: Cluster name, if not specified the database configured in + the json settings file will be used. + bearerToken: Bearer Token, if not specified the database configured in + the json settings file will be used. +``` + +### mathworks.adx.isClusterRunning + +```text +isClusterRunning Returns a logical true if the cluster is running + If the cluster is not running a false is returned. The state is optionally + displayed. An optional adx.control.models.Cluster object is returned with + full cluster metadata information. + + Example: + tf = mathworks.adx.isClusterRunning(); +``` + +### mathworks.adx.listTables + +```text +listTables Returns a list of tables and their properties + + contains the specified table or all tables in the + database with a detailed summary of each table's properties. + You must have at least Database User, Database Viewer, or Database + Monitor permissions to run this command. + + Optional arguments + database: Database name string, the default is taken from the JSON settings file. + + cluster: Cluster name string, the default is taken from the JSON settings file. + + Returns + tableNames: A string array of the table names. + + Success: Logical true if the query successfully completes, otherwise false. + + tableDetails: A table containing metadata about the tables. +``` + +### mathworks.adx.mgtCommand + +```text +mgtCommand Runs a management command + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + scopes: For commands scopes can be specified as a string array. + + cluster: A non default cluster can be specified as a string or character vector. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + verbose: A logical to enable additional output. + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A logical to indicate if the query succeed or not. + + requestId: The request's ID string in ADX + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was canceled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion +``` + +### mathworks.adx.run + +```text +run Runs a KQL query or management command + This ia a high-level interface to simplify running most queries. + + Required argument + query: query to be run as a string or character vector + + Optional arguments + database: Name of the the database to be used, by default a value will be + taken from the settings JSON file. + + propertyNames: Property names to be applies to the query, specified as a + string array. + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array. + + type: Force the type of the query, options are "query" or "command" by default + the query will be examined to determine the type. + + scopes: For commands scopes can be specified as a string array. + + cluster: A non default cluster can be specified as a string or character vector. + + bearerToken: Token used to authenticate KQL queries only, overrides JSON + settings file based authentication. Provided as a text scalar. + + convertDynamics: Logical to determine if dynamic fields are decoded or not. + + nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + null values are handled in returned results. + + customRowDecoder: A function handle to a function that will be called to decode + Primary Result table JSON rows instead of the default decoder. + See: Documentation/Performance.md for more details. + + useParallel: A logical to enable the use of Parallel Computing Toolbox if + available to improve performance on large queries. + Default is false. Applies to KQL queries only. + See: Documentation/Performance.md for more details. + + parallelThreshold: The number of rows above which a parpool will be started + rather than just working serially, if making a large + query or repeated queries then the overhead caused by + the creation of a parpool should be amortized. + The default is 1000 rows. + + verbose: A logical to enable additional output. + + + Return values + result: Table containing the primary result of the query or command. If the + request failed the result will be a adx.control.models.ErrorResponse + rather than a table. + + success: A boolean to indicate if the query succeed or not. + + requestId: The request's ID string in ADX + + resultTables: Returned tables including metadata, values have not been processed + into MATLAB Tables. + + dataSetHeader: For calls that use the V2 REST API the value contains version + information and whether the call is progressive or not. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + + dataSetCompletion: For calls that use the V2 REST API the value indicates + if the request was cancelled or has an error and if so + error information, in general the success value and result + (adx.control.models.ErrorResponse) is simpler to work with. + See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion + + Example: + [result, success] = mathworks.adx.run('print mycol="Hello World"') +``` + +### mathworks.adx.tSQLQuery + +```text +tSQLQuery Runs a T-SQL query + This is a higher-level wrapper function for KQLQuery which sets the + query propertyName and propertyValue to enable the tSQL syntax. + Input arguments and return values are as per KQLQuery. + + It assumes the query_language property is not already set, if so it will + be overwritten. + + See: https://learn.microsoft.com/en-us/azure/data-explorer/t-sql +``` + +### mathworks.adx.tableExists + +```text +TABLEEXISTS Returns true is a given table exists + + Example: + tableExists = mathworks.adx.tableExists(tableName, database=database, cluster=cluster); +``` + +### mathworks.internal + +### mathworks.internal.adx + +### mathworks.internal.adx.buildSettingsFile + +```text +buildSettingsFile Gets user input for JSON settings file fields + Template files can be found in /Software/MATLAB/config + + Optional argument + filename: Filename to store settings, default is /Software/MATLAB/config/adx.Client.Settings.json> +``` + +### mathworks.internal.adx.charOrString2Guid + +```text +charOrString2Guid Converts a scalar MATLAB string or char to a Kusto guid + Example: guid(74be27de-1e4e-49d9-b579-fe0b331d3642) + A scalar or empty input value must be provided. + If an empty value is provided guid(null) is returned. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/guid +``` + +### mathworks.internal.adx.charOrString2String + +```text +charOrString2String Converts a MATLAB char or string to a Kusto string + A string is returned. + Input must be a empty, missing, scalar string or character vector. + + If the optional logical named argument verbatim (default: false) a @ sign is + prepended to the string. The backslash character (\) stands for itself and + isn't an escape character. Prepending the @ character to string literals + serves as a verbatim identifier. In verbatim string literals, double quotes + are escaped with double quotes and single quotes are escaped with single quotes. + + An obfuscated string is created by setting the optional named argument + obfuscated (default: false). It prepends a H character to a verbatim + or string literal. The obfuscated argument is not applied to multi-lines. + + Multi-line string literals support newline (\n) and return (\r) characters. + Multi-line string literals do not support escaped characters, similar to verbatim + string literals. Multi-line string literals don't support obfuscation. + + Kusto does not support null strings hence empty or missing MATLAB string + values are treated as follows: + + | Literal Verbatim Multi-line + ----------------------------------------------- + missing | "" @"" `````` + empty | "" @"" `````` + + If an empty string is provided "", `````` or @"" is returned. + + Optional named arguments + verbatim Logical, default: false + multiline Logical, default: false + + Verbatim and multiline cannot be enabled at the same time. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/string +``` + +### mathworks.internal.adx.datetime2datetime + +```text +datetime2datetime Converts a scalar MATLAB datetime to a Kusto datetime + A scalar or empty input value must be provided. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/datetime +``` + +### mathworks.internal.adx.dispErrorAdditionalInfo + +```text +Displays a adx.control.models.ErrorAdditionalInfo +``` + +### mathworks.internal.adx.dispErrorDetails + +```text +dispErrorDetails Display a adx.control.models.ErrorDetail +``` + +### mathworks.internal.adx.dispErrorResponse + +```text +dispErrorResponse Display a adx.control.models.ErrorResponse +``` + +### mathworks.internal.adx.doubleOrSingle2Decimal + +```text +doubleOrSingle2Decimal Converts a MATLAB double or single to a Kusto decimal + A string is returned. + If empty decimal(null) is returned. + Otherwise decimal() is returned. + A scalar or empty input value must be provided. + + Note Arithmetic operations involving decimal values are significantly slower + than operations on real data type. As MATLAB does not support floating point + precision beyond double using doubleOrSingle2Real() instead is recommended + if a real value can be used. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/decimal +``` + +### mathworks.internal.adx.doubleOrSingle2Real + +```text +doubleOrSingle2Real Converts a MATLAB double or single to a Kusto real + A string is returned. + If empty real(null) is returned. + If nan real(nan) is returned. + If +inf real(+inf) is returned. + If -inf real(-inf) is returned. + A scalar or empty input value must be provided. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/real +``` + +### mathworks.internal.adx.duration2Timespan + +```text +duration2Timespan Converts a MATLAB duration to a Kusto timespan + Input must be a scalar duration, duration.empty or duration NaN. + A timespan literal is returned as a scalar string. + At most millisecond precision is supported. + A duration.empty or duration NaN are returned as "timespan(null)" + Other values are returned in the format: "timespan(days.hours:minutes:seconds.milliseconds)" + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan +``` + +### mathworks.internal.adx.exampleCustomRowDecoder + +```text +exampleCustomRowDecoder Example of a custom JSON parser function + Sample decoder that handles an array of rows of the form: + [128030544,1.0,"myStringValue-1"] + with fields of types int64, double and string. + + It will not process other data and is intended for speed rather than + strict correctness or robustness. + + The custom decoder is applied to the PrimaryResult rows field only. + + It is required to return a cell array of size number of rows by the + number of columns that can be converted to a MATLAB table with the + given schema. + + It is not required to respect input arguments flags if foreknowledge of + returned data permits it. + + Custom decoders are applied to nonprogressive KQL API v2 mode queries only. + If support for other query types is required contact MathWorks. + + Example: + query = sprintf('table("%s", "all")', tableName); + crd = @mathworks.internal.adx.exampleCustomRowDecoder; + [result, success] = mathworks.adx.run(query, customRowDecoder=crd); + + For a generic decoder see: getRowsWithSchema. +``` + +### mathworks.internal.adx.getDataBearerToken + +```text +getDataBearerToken Gets a bearer token by forcing a query +``` + +### mathworks.internal.adx.getDefaultConfigValue + +```text +getDefaultConfigValue Reads a field from the config file + A string is returned. +``` + +### mathworks.internal.adx.getIngestionResources + +```text +getIngestionResources Get queues and other values to do ingestion + Returns a adx.data.models.IngestionResourcesSnapshot +``` + +### mathworks.internal.adx.getKustoIdentityToken + +```text +getKustoIdentityToken Management query to request a Kusto Identity Token + Query used is: .get kusto identity token +``` + +### mathworks.internal.adx.getRowWithSchema + +```text +GETROWWITHSCHEMA Extract a row of data as a cell array from a JSON string using schemas + For detail on dynamic values see: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic +``` + +### mathworks.internal.adx.getRowsWithSchema + +```text +GETROWSWITHSCHEMA Extract rows of data as a cell array from a JSON string using schemas + For detail on dynamic values see: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic +``` + +### mathworks.internal.adx.getTableAndSchemas + +```text +getTableAndSchemas Returns a MATLAB table to store a returned Kusto table + + The table is not populated. + Column names are mapped to valid MATLAB column names using matlab.lang.makeValidName + Datatype schemas are also returned. + MATLAB types mapped from the Kusto types using mathworks.internal.adx.mapTypesKustoToMATLAB + + Required Arguments + columns: 1d array of adx.data.models.Column + + numRows: Number of rows in the table + + Optional Arguments + name: Name for the table, the default is: "". matlab.lang.makeValidName is applied. + + nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + + verbose: Logical to enable additional output, default is false. + + Return Values: + mTable: Unpopulated MATLAB table. + + matlabSchema: String array of the underlying MATLAB types for columns which + may be stored in a cell to enable representation of nulls + + tableSchema: String array of the actual MATLAB column types used to create the table + + kustoSchema: String array of the Kusto type fields for the columns also + stored in the table descriptions fields +``` + +### mathworks.internal.adx.getTableSchema + +```text +getTableSchema + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/show-table-schema-command +``` + +### mathworks.internal.adx.int2IntOrLong + +```text +int2IntOrLong Converts a MATLAB int to a Kusto int or long + A scalar or empty input value must be provided. + A scalar string is returned. + If empty an int(null) or long(null) is returned. + + See also: + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/int + https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/long +``` + +### mathworks.internal.adx.isMappableMATLABToKusto + +```text +isMappableMATLABToKusto Returns true if a MATLAB type can be converted to a given Kusto type + + The following mappings are supported: + + Kusto Type MATLAB Types + ---------------------------------------------------- + int int8, uint8, int16, uint16, int32 + long int8, uint8, int16, uint16, int32, uint32, int64 + string string char + guid string char + real double single + decimal double single + datetime datetime + bool logical + timespan duration + dynamic See optional allowDynamic flag + + As dynamic datatype are "dynamic" the contents must be parsed to determine + if the can be converted the optional named argument allowDynamic if true + makes the assumption that a dynamic type will be convertible. + The default value is true. False is a more conservative value. +``` + +### mathworks.internal.adx.kustoSchemaToNamesAndTypes + +```text +kustoSchemaToNamesAndTypes Splits a Kusto schema into string arrays of column names and types +``` + +### mathworks.internal.adx.loadConfig + +```text +LOADCONFIG Reads a config file if it exists + + Optional argument + configFile: Path to JSON settings +``` + +### mathworks.internal.adx.logical2Bool + +```text +logical2Bool Converts a MATLAB logical to a Kusto bool + A string is returned. + If empty bool(null) is returned, otherwise bool(true) + or bool false. + A scalar or empty input value must be provided. +``` + +### mathworks.internal.adx.mapTypesKustoToMATLAB + +```text +MAPTYPESKUSTOTOMATLAB Map Kusto datatypes to corresponding MATLAB type + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + for .net mapping +``` + +### mathworks.internal.adx.mapTypesMATLABToKusto + +```text +mapTypesMATLABToKusto Map MATLAB datatypes to corresponding Kusto type + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + for .net mapping +``` + +### mathworks.internal.adx.queryV1Response2Tables + +```text +queryV1Response2Tables Convert a v1 API response to MATLAB tables + + Required argument + response: A adx.data.models.QueryV1ResponseRaw as returned by queryRun(). + + Optional arguments + nullPolicy: Enumeration to determine how null values should be handled. + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + + convertDynamics: Logical to determine if dynamic fields should be decoded + from JSON. Default is true. + + allowNullStrings: Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is false. + + useParallel: Logical to enable the use of Parallel Computing Toolbox if available + + parallelThreshold: Threshold for row number above which Parallel Computing + Toolbox will be used, default is 1000. + + customRowDecoder: Function handle to a non default row conversion function + Function is applied to the Primary Result table only. + In certain unexpected states it is not applied. + + verbose: Logical to enable additional output, default is false. + + Return values + primaryResult: The primary result as a MATLAB table. + + resultTables: The other returned tables as MATLAB tables. +``` + +### mathworks.internal.adx.queryV2Response2Tables + +```text +queryV2Response2Tables Converts a v2 API response to MATLAB tables + + Required Argument: + v2Response: A adx.data.models.QueryV2ResponseRaw which been processed by JSONMapper + + Optional Arguments: + convertDynamics: Logical to determine if Dynamic fields are decoded or not + Default is true + + nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + + allowNullStrings: Logical to allow null strings in input. Kusto does not + store null strings but control command may return them. + Default is false. + customRowDecoder: Function handle to a non default row conversion function + Function is applied to the Primary Result table only. + In certain unexpected states it is not applied. + + useParallel: Logical to enable the use of Parallel Computing Toolbox if available + + parallelThreshold: Threshold for row number above which Parallel Computing + Toolbox will be used, default is 1000. + + verbose: Logical to enable additional output, default is false + + Return Values: + primaryResult: The primary result as a MATLAB table + + resultTables: The other returned tables as MATLAB tables. + + dataSetHeader: A adx.data.models.DataSetHeader describes the high-level properties + of the returned data + + dataSetCompletion: A adx.data.models.DataSetCompletion indicates success and other + properties of the query + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 +``` + +### mathworks.internal.adx.setCustomQueryHeaders + +```text +setCustomHeaders Sets custom header fields Query calls + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/request#request-headers +``` + +### mathworks.internal.adx.setDefaultConfigValue + +```text +setDefaultConfigValue Sets a field in the config file +``` + +### mathworks.internal.adx.timespanLiteral2duration + +```text +timespanLiteral2duration Converts a Kusto timespan value to a MATLAB duration + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan +``` + +### mathworks.internal.adx.timespanValue2duration + +```text +timespanValue2duration Converts a timespan value to a MATALB duration + + See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan +``` + +### mathworks.internal.adx.toDynamic + +```text +toDynamic Creates a Kusto dynamic literal value + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic +``` + +### mathworks.internal.adx.toKustoLiteral + +```text +toKustoLiteral Converts a MATLAB value to a Kusto Literal + Supports duration, logical, int, double, single, string, char, and + datetime MATLAB input types. + + See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types +``` + +### mathworks.internal.adx.validateConfig + +```text +VALIDATECONFIG Sanity checks configuration settings +``` + +### mathworks.internal.blob + +### mathworks.internal.blob.clientCopyToBlobContainer + +```text +clientCopyToBlobContainer Copies a file to a blob for ingestion + Uses MATLAB's built in copy file function. +``` + +### mathworks.internal.blob.clientUploadToBlobContainer + +```text +clientUploadToBlobContainer Uploads a file to a blob for ingestion + Uses Azure Services support package +``` + +### mathworks.internal.blob.sanitizeBlobName + +```text +sanitizeBlobName Checks that a name complies with Blob name limits +``` + +### mathworks.internal.curl + +### mathworks.internal.curl.adxCurlWrite + +```text +adxCurlWrite adx caller for mathworks.internal.curlWrite + Inserts custom headers required by ADX. + + This function may be changed or removed in a future release without + notice. currently only windows is supported. + It is a Proof of Concept testing mechanism to enable TCP keep-alive + Packets only, it should be avoided in production use. + + Arguments: + clusterUrl: A cluster URL including https:// as scalar text if not provided + an attempt will be made to read the value from adx.Client.Settings.json + + urlPath: Query URL path as scalar text, default: "/v1/rest/query" + + query: KQL query to execute as scalar text, default (for PoC purposes): + "print mycol=""Hello World""" + Alternatively a a file containing the complete Query body can be + provided byt prefixing the file name with a "@" symbol as + normal in curl command syntax. + When the JSON body for the query is constructed only the csl + and db fields are populated, if further properties are + required then the JSON body should be provided in its + entirety as described above + + bearerToken: A bearerToken as scalar text if not provided an attempt will + be made to read the value from adx.Client.Settings.json + + id: Request id header value as scalar text, if not provided a UUID is created + + + skipJSONDecode: A logical to determine if JSON is decode using MATLAB's + jsondecode or not, default is true + + propertyNames: Property names to be applies to the query, specified as a + string array + + propertyValues: Property values that correspond the propertyNames, specified + as a cell array + + verbose: A logical to enable additional feedback, default is true + WARNING: verbose output will display the bearer token + + + Returned values: + tf: Logical that indicates if a HTTP status 200 was returned + + result: Result of the query as a string or a decoded JSON struct + In certain error cases an empty struct is returned + + id: Request Id + + + Examples: + + If called with no arguments with a adx.Client.Settings.json file + present containing a valid bearer token the query: print mycol='Hello World' + should run, returning a logical true, populated result struct and + request UUID: + + [tf, result, id] = mathworks.internal.curl.adxCurlWrite() + + + Provide key arguments: + + clusterUrl = "https://mycluster.westeurope.kusto.windows.net"; + query = 'print mycol="Hello World"'; + bearerToken = "eyJ0ec1RuQ"; + [tf, result, id] = mathworks.internal.adxCurlWrite(clusterUrl=clusterUrl, bearerToken=bearerToken, query=query, verbose=true) + + + Convert the primary result to a MATLAB table + Assumes the url path is specifying a v1 API, as per default: + + [tf, result, id] = mathworks.internal.curl.adxCurlWrite(skipJSONDecode=true); + [primaryResult, resultTables] = mathworks.internal.adx.queryV1Response2Tables(result); + + + Set sample request properties & convert to a MATLAB table: + + propertyNames = {"notruncation", "query_datetimescope_column", "servertimeout"}; + tenMinDuration = minutes(10); + propertyValues = {true, "mycol", tenMinDuration}; + [tf,result,id] = mathworks.internal.curl.adxCurlWrite(verbose=true, propertyNames=propertyNames, propertyValues=propertyValues, skipJSONDecode=true) + [primaryResult, ~] = mathworks.internal.adx.queryV1Response2Tables(result) +``` + +### mathworks.internal.curl.curlWrite + +```text +curlWrite webwrite like functionality via curl PoC implementation + This function may be changed or removed in a future release without + notice. Currently only windows is supported. + Currently only the HTTP POST method is supported. + This function is provided as a testing mechanism for TCP keep-alive + Packets. + + Required Arguments + + url: A MATLAB.net.URI containing the host to connect to an any + required path elements e.g.: + matlab.net.URI("https://myhost.example.com:1234/path1/path2") + + dataFilename: A scalar text value for a filename containing the JSON + request body payload to send to the endpoint. + + webOpts: A weboptions object. Used to configure curl arguments. + NB: This value is currently required but NOT yet used. + + Optional Positional Argument + + verbose: A logical in enable or disable increased logging + Default is true + + Optional Named Arguments + + keepaliveTime: An integer number of seconds after which to send a + keep-alive packet. Default is 60. + + additionalArguments: A string array of extra arguments to be appended to + the generated curl command. Prefix and postfix padding + will be added. + + skipJSONDecode: A logical to skip decoding returned JSON and just + return a scalar character vector. Default is false. + + Return Value: + + Response: Decoded JSON or a character vector containing the returned JSON + See: skipJSONDecode. + + Example: + + result = mathworks.internal.curl.curlWrite(matlab.net.URI("https://httpbin.org/post"), "", weboptions, true) + + See also: mathworks.internal.curl.adxCurlWrite +``` + +### mathworks.internal.countDown + +```text +countDown displays a countDown of wait seconds +``` + +### mathworks.utils + +### mathworks.utils.jwt + +### mathworks.utils.jwt.ClaimsJM + +Superclass: adx.control.JSONMapper + +```text +ClaimsJM JWT Claims that use JSON Mapper +``` + +#### mathworks.utils.jwt.ClaimsJM.ClaimsJM + +```text +To allow proper nesting of object, derived objects must + call the JSONMapper constructor from their constructor. This + also allows objects to be instantiated with Name-Value pairs + as inputs to set properties to specified values. +``` + +### mathworks.utils.jwt.JWT + +```text +JWT Represent a Java Web Token + All times as assumed to be UTC + + This is not a generic JWT interface and is intended for use with + Azure Data Explorer only at this point. +``` + +#### mathworks.utils.jwt.JWT.JWT + +```text +JWT Create a JWT object from a token string +``` + +#### mathworks.utils.jwt.JWT.expiryTime + +```text +mathworks.utils.jwt.JWT/expiryTime is a function. + exp = expiryTime(obj) +``` + +#### mathworks.utils.jwt.JWT.isExpired + +```text +mathworks.utils.jwt.JWT/isExpired is a function. + tf = isExpired(obj) +``` + +#### mathworks.utils.jwt.JWT.isTimeValid + +```text +mathworks.utils.jwt.JWT/isTimeValid is a function. + tf = isTimeValid(obj) +``` + +#### mathworks.utils.jwt.JWT.notBeforeTime + +```text +mathworks.utils.jwt.JWT/notBeforeTime is a function. + nbf = notBeforeTime(obj) +``` + +### mathworks.utils.msOAuth2Client + +Superclass: handle + +```text +msOAuth2Client obtains and caches tokens for the Microsoft + Identity Platform. + + OAuth2Client Methods: + OAuth2Client - Constructor + getToken - Obtain an access token for a requested scope + getFullToken - Obtain the full token for a requested scope + + Note: the access tokens and refresh tokens are stored inside a + MAT-file in plain-text and are not encrypted. The MAT-file is saved + as .mlMsTokenCache in your home directory. This file should be kept + confidential. +``` + +#### mathworks.utils.msOAuth2Client.acquireClientCredentialToken + +```text +mathworks.utils.msOAuth2Client/acquireClientCredentialToken is a function. + token = acquireClientCredentialToken(obj, scopes) +``` + +#### mathworks.utils.msOAuth2Client.acquireDeviceCodeToken + +```text +Initiate Device Code Authentication +``` + +#### mathworks.utils.msOAuth2Client.acquireInteractiveBrowserToken + +```text +mathworks.utils.msOAuth2Client/acquireInteractiveBrowserToken is a function. + token = acquireInteractiveBrowserToken(obj, scopes, serviceMetadataURI) +``` + +#### mathworks.utils.msOAuth2Client.acquireManagedIdentityToken + +```text +mathworks.utils.msOAuth2Client/acquireManagedIdentityToken is a function. + token = acquireManagedIdentityToken(obj, scopes) +``` + +#### mathworks.utils.msOAuth2Client.acquireToken + +```text +mathworks.utils.msOAuth2Client/acquireToken is a function. + token = acquireToken(obj, scopes) +``` + +#### mathworks.utils.msOAuth2Client.addTokenToCache + +```text +Check whether any tokens have been cached for the given + tenant at all +``` + +#### mathworks.utils.msOAuth2Client.findTokenInCache + +```text +Return an empty token if returning early +``` + +#### mathworks.utils.msOAuth2Client.getFullToken + +```text +GETFULLTOKEN Obtains a token in the same way as getToken, + only instead of only returning the access token itself, a + struct is returned which contains the accessToken, an + expiresAt field, and if available also a refreshToken. Then + syntax for this method is the same as for getToken. + + See Also: GETTOKEN +``` + +#### mathworks.utils.msOAuth2Client.getToken + +```text +GETTOKEN Obtain and return an access token for the configured + Tenant, ClientID and Scopes. + + If a token for configured Tenant, ClientID and Scopes: + - IS found in the cache and it + - Has NOT expired, it is returned + - HAS expired and a refresh token IS available, it + is refreshed and then returned, if refresh fails + a new token is requested and returned + - HAS expired and there is NO refresh token, a new + token is requested and returned + - Is NOT found in the cache, a new token is requested + and returned upon success + + Note: to obtain a refresh token, explicitly include + "offline_access" in the requested scopes. + + Examples: + + Obtain an access token for Azure Key Vault Scope with + refresh token: + + access_token = GETTOKEN(["https://vault.azure.net/.default","offline_access"]) + + Obtain an access token for Azure Storage without + refresh token: + + access_token = GETTOKEN(["https://storage.azure.com/.default"]) +``` + +#### mathworks.utils.msOAuth2Client.initializeCache + +```text +Load cache from disk if it exists or start a new one +``` + +#### mathworks.utils.msOAuth2Client.msOAuth2Client + +```text +msOAuth2Client Constructor + + Create a client for user principals through Device Code + authentication: + + client = msOAuth2Client(tenantId,clientId); + + When working with Device Code authentication, user + interaction is needed if a new token has to be requested. + If the requested token already exists in the cache (and can + be refreshed if needed) no further user interaction should + be required. + + Create a client for service principals through Client + Secret authentication: + + client = msOAuth2Client(tenantId,clientId,clientSecret); + + When working with Client Secret authentication, no user + interaction is required. +``` + +#### mathworks.utils.msOAuth2Client.refreshToken + +```text +Perform the refresh +``` + +#### mathworks.utils.msOAuth2Client.saveCache + +```text +Save the cache to disk +``` + +### mathworks.utils.UUID + +```text +UUID Returns a UUID string as created by java.util.UUID.randomUUID +``` + +### mathworks.utils.addArgs + +```text +addArg Builds and named argument cell array + + Example: + args = mathworks.utils.addArgs(options, ["authMethod", "profileName"]); + x = myFunc(args{:}); +``` + +### Logger + +Superclass: handle + +```text +Logger - Object definition for Logger + --------------------------------------------------------------------- + Abstract: A logger object to encapsulate logging and debugging + messages for a MATLAB application. + + Syntax: + logObj = Logger.getLogger(); + + Logger Properties: + + LogFileLevel - The level of log messages that will be saved to the + log file + + DisplayLevel - The level of log messages that will be displayed + in the command window + + LogFile - The file name or path to the log file. If empty, + nothing will be logged to file. + + Messages - Structure array containing log messages + + Logger Methods: + + clearMessages(obj) - Clears the log messages currently stored in + the Logger object + + clearLogFile(obj) - Clears the log messages currently stored in + the log file + + write(obj,Level,MessageText) - Writes a message to the log + + Examples: + logObj = Logger.getLogger(); + write(logObj,'warning','My warning message') +``` + +#### Logger.Logger + +```text +Logger - Object definition for Logger + --------------------------------------------------------------------- + Abstract: A logger object to encapsulate logging and debugging + messages for a MATLAB application. + + Syntax: + logObj = Logger.getLogger(); + + Logger Properties: + + LogFileLevel - The level of log messages that will be saved to the + log file + + DisplayLevel - The level of log messages that will be displayed + in the command window + + LogFile - The file name or path to the log file. If empty, + nothing will be logged to file. + + Messages - Structure array containing log messages + + Logger Methods: + + clearMessages(obj) - Clears the log messages currently stored in + the Logger object + + clearLogFile(obj) - Clears the log messages currently stored in + the log file + + write(obj,Level,MessageText) - Writes a message to the log + + Examples: + logObj = Logger.getLogger(); + write(logObj,'warning','My warning message') +``` + +#### Logger.clearLogFile + +```text +clearLogFile - Method to clear messages in the log file + ------------------------------------------------------------------------- + Abstract: Clears the log messages currently stored in the log + file + + Syntax: + logObj.clearLogFile(Level) + clearLogFile(logObj) + + Inputs: + logObj - Logger object + + Outputs: + none +``` + +#### Logger.clearMessages + +```text +clearMessages - Method to clear messages in the Logger + ------------------------------------------------------------------------- + Abstract: Clears the log messages currently stored in the + Logger object + + Syntax: + logObj.clearMessages(Level) + clearMessages(logObj) + + Inputs: + logObj - Logger object + + Outputs: + none +``` + +#### Logger.closeLogFile + +```text +If a log file was open, close it +``` + +#### Logger.debug + +```text +DEBUG List MATLAB debugging functions + + dbstop - Set breakpoint. + dbclear - Remove breakpoint. + dbcont - Resume execution. + dbdown - Change local workspace context. + dbmex - Enable MEX-file debugging. + dbstack - List who called whom. + dbstatus - List all breakpoints. + dbstep - Execute one or more lines. + dbtype - List file with line numbers. + dbup - Change local workspace context. + dbquit - Quit debug mode. + + When a breakpoint is hit, MATLAB goes into debug mode, the debugger + window becomes active, and the prompt changes to a K>>. Any MATLAB + command is allowed at the prompt. + + To resume program execution, use DBCONT or DBSTEP. + To exit from the debugger use DBQUIT. +``` + +#### Logger.delete + +```text +If a log file was open, close it +``` + +#### Logger.error + +```text +Expect an MException to be returned if so catch it and throw as the + caller to keep logger entries out of the console output +``` + +#### Logger.getLogger + +```text +This method returns the singleton logger object. Only one + logger is allowed in a MATLAB session, and this method will + retrieve it. +``` + +#### Logger.log + +```text +LOG Natural logarithm. + LOG(X) is the natural logarithm of the elements of X. + Complex results are produced if X is not positive. + + See also LOG1P, LOG2, LOG10, EXP, LOGM, REALLOG. +``` + +#### Logger.openLogFile + +```text +Was a file name passed in? +``` + +#### Logger.processMessage + +```text +Called from write() + Handle the file logging first as if an error throwing the error + will halt execution and the file logging (if enabled) will not + happen + Should the message be written to the log file? +``` + +#### Logger.verbose + +```text +Logger.verbose is a function. + Logger.verbose(varargin) +``` + +#### Logger.warning + +```text +Logger.warning is a function. + Logger.warning(varargin) +``` + +#### Logger.write + +```text +write - Method to write messages to the Logger + ------------------------------------------------------------------------- + Abstract: Adds a new message to the Logger, with the + specified message level and text + + Syntax: + logObj.write(Level,MessageText) + write(logObj,Level,MessageText) + write(logObj,Level,MessageText,myException) + + Inputs: + logObj - Logger object + Level - Message level string ('debug','warning',etc) + MessageText - Message text string + myException - A previously caught or created exception + + Outputs: + none + + Examples: + logObj = Logger.getLogger; + write(logObj,'warning','My warning message') +``` + +### AzureCommonRoot + +```text +AZURECOMMONROOT Return Azure Services root location + Locate the installation of the Azure interface package to allow easier construction + + The special argument of a negative number will move up folders, e.g. + the following call will move up two folders, and then into + Documentation. + + docDir = AzureCommonRoot(-2, 'Documentation') +``` + +### AzureShell + +```text +AZURESHELL Invokes the Azure Web Browser based shell + Cloud Shell enables access to a browser-based command-line experience with + Azure. It is an interactive, browser-accessible shell for managing Azure + resources. The shell can be Bash or PowerShell. The system configured browser + is used. Authentication will be requested if not already in place within the + browser. +``` + +### AzureStorageExplorer + +```text +AZURESTORAGEEXPLORER Invokes the Azure Storage Explorer + Brings up the Azure Storage Explorer. It is possible to specify the local + installation of the storage explorer in the configuration file. + + By default the MATLAB path will be searched for a configuration file called + storagesettings.json, however an alternative filename can be provided as + an argument to this function. +``` + +### Logger + +```text +Logger - Object definition for Logger + --------------------------------------------------------------------- + Abstract: A logger object to encapsulate logging and debugging + messages for a MATLAB application. + + Syntax: + logObj = Logger.getLogger(); + + Logger Properties: + + LogFileLevel - The level of log messages that will be saved to the + log file + + DisplayLevel - The level of log messages that will be displayed + in the command window + + LogFile - The file name or path to the log file. If empty, + nothing will be logged to file. + + Messages - Structure array containing log messages + + Logger Methods: + + clearMessages(obj) - Clears the log messages currently stored in + the Logger object + + clearLogFile(obj) - Clears the log messages currently stored in + the log file + + write(obj,Level,MessageText) - Writes a message to the log + + Examples: + logObj = Logger.getLogger(); + write(logObj,'warning','My warning message') +``` + +### configureCredentials + +```text +CONFIGURECREDENTIALS Reads JSON configuration file and returns credentials object + A configuration file path must be passed as a string or character vector. + Authentication method to use is determined using the AuthMethod field of the + JSON configuration file. + + Supported authentication methods are: + storageSharedKey (Azure Data Lake Storage Gen2 only) + connectionString (Azure Data Lake Storage Gen2 only) + environment + defaultAzure + clientSecret + interactiveBrowser + deviceCode + sharedTokenCache + managedIdentity + azurecli + + The resulting credential object can then be used by the corresponding client + builder. + + The function has one optional Name-Value input pair: + + 'DeviceCodeCallback', @myFunctionHandle + + This option is only valid when working with the DeviceCode method and it + allows specifying a custom function for displaying the Device Code login + instructions. +``` + +### configureProxyOptions + +```text +CONFIGUREPROXYOPTIONS Configured Java proxy options object + A com.azure.core.http.ProxyOptions Java object is returned if a proxy is + configured otherwise an empty double is returned corresponding to a null. +``` + +### createKeyVaultClient + +```text +CREATEKEYVAULTCLIENT Convenience function for creating KeyClient and + SecretClient + + client = createKeyVaultClient('Type','Key') creates a KeyClient with + default options. + + client = createKeyVaultClient('Type','Secret') creates SecretClient with + default options. + + By default createKeyVaultClient reads Credential information and the + Vault Name from a configuration file named 'keyvaultsettings.json'. The + function automatically searches for this file on the MATLABPATH. It is + possible to specify a different filename using 'ConfigurationFile'. It is + also possible to provide 'Credentials' and 'VaultName' as inputs to the + function directly in case which no configuration file may be needed. See + the Name, Value pairs below for more details. + + Additional Name, Value pairs can be supplied to configure non-default + options: + + 'ConfigurationFile', explicitly specify which configuration file to + use. This file is used for configuring Credentials (when not + supplied as input) and/or Account Name (when not supplied as input). + + Default Value: 'keyvaultsettings.json' + + 'Credentials', explicitly specify credentials to use. This for example + allows building multiple clients based on the same credentials + without having to go through (interactive) authentication again. If + not specified, createKeyVaultClient uses configureCredentials with + 'ConfigurationFile' as input to first configure credentials before + building the client. + + Hint: configureCredentials can be used to build valid Credentials. + + Example: + credentials = configureCredentials('myCredentials.json'); + client1 = createKeyVaultClient('Credentials',credentials,'Type','Key') + client2 = createKeyVaultClient('Credentials',credentials,'Type','Secret') + + 'VaultName', explicitly specify the Vault name for the client. If not + specified createKeyVaultClient uses loadConfigurationSettings to + load configuration options from 'ConfigurationFile'. This file must + then contain a "VaultName" setting. + + See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS +``` + +### createStorageClient + +```text +CREATESTORAGECLIENT Convenience function for creating BlobServiceClient, + BlobContainerClient, BlobClient, QueueServiceClient, QueueClient, + DataLakeFileSystemClient, DataLakeDirectoryClient and DataLakeFileClient. + + client = createStorageClient() creates a BlobServiceClient with default + options. + + client = createStorageClient('ContainerName','myContainer') + creates BlobContainerClient with default options. + + client = createStorageClient('ContainerName','myContainer',... + 'BlobName','myBlob') creates a BlobClient with default options. + + client = createStorageClient('Type','QueueService') creates a + QueueServiceClient with default options. + + client = createStorageClient('QueueName','myQueue') creates a + QueueClient with default options. + + client = createStorageClient('FileSystemName','myFileSystem') creates a + DataLakeFileSystemClient with default options. + + client = createStorageClient('FileSystemName','myFileSystem',... + 'DirectoryName','my/dir') creates a DataLakeDirectoryClient + with default options. + + client = createStorageClient('FileSystemName','myFileSystem',... + 'FileName','my/dir/file') creates a DataLakeFileClient with + default options. + + By default createStorageClient reads Credential information and the + Account Name (used to build the Client endpoint) from a configuration + file named 'storagesettings.json'. The function automatically searches for + this file on the MATLABPATH. It is possible to specify a different + filename using 'ConfigurationFile'. It is also possible to provide + 'Credentials' or 'SASToken' and 'AccountName' as inputs to the function + directly in case which no configuration file may be needed. See the Name, + Value pairs below for more details. An endpoint can be set if required + e.g. if it does not conform to the default https://..core.windows.net + pattern, see below for EndPoint details. + + Additional Name, Value pairs can be supplied to configure non-default + options: + + 'Type', explicitly specify the type of client to create. Required for + creating QueueServiceClient. In all other cases the type of client + is derived from whether 'ContainerName', 'BlobName', 'QueueName', + 'FileSystemName', 'DirectoryName', and/or 'FileName' are provided. + With none of these configured a BlobServiceClient is created. If + only BlobContainer is specified a BlobContainerClient is created, + if both BlobContainer and BlobName are specified a BlobClient is + created. If QueueName is specified a QueueClient is created. If + only FileSystemName is specified a DataLakeFileSystemClient is + created, if DirectoryName is specified as well, a + DataLakeDirectoryClient is created, or if FileName is specified a + DataLakeFileClient is created. + + Possible Values: 'BlobService', 'BlobContainer', 'Blob', + 'QueueService', 'QueueClient', 'DataLakeDirectory', + 'DataLakeFile', or 'DataLakeFileSystem'. + + 'ConfigurationFile', explicitly specify which configuration file to + use. This file is used for configuring Credentials (when not + supplied as input) and/or Account Name (when not supplied as input). + + Default Value: 'storagesettings.json' + + 'Credentials', explicitly specify credentials to use. This for example + allows building multiple clients based on the same credentials + without having to go through (interactive) authentication again. If + neither this option nor 'SASToken' is specified, + createStorageClient uses configureCredentials with + 'ConfigurationFile' as input to first configure credentials before + building the client. + + Hint: configureCredentials can be used to build valid Credentials. + + Example: + credentials = configureCredentials('myCredentials.json'); + client1 = createStorageClient('Credentials',credentials,'ContainerName','container1') + client2 = createStorageClient('Credentials',credentials,'ContainerName','container2') + + 'SASToken', explicitly specify a SAS Token to use for authentication + rather than reading authentication details from a configuration + file or a credentials object passed in through the 'Credentials` + option. If neither this option nor 'Credentials' are specified, + createStorageClient uses configureCredentials with + 'ConfigurationFile' as input to first configure credentials before + building the client. + + 'AccountName', explicitly specify the AccountName used to configure the + account and potentially the endpoint for the client. + If not specified createStorageClient uses loadConfigurationSettings + to load configuration options from 'ConfigurationFile'. + This file must then contain a "AccountName" setting. + + 'EndPoint', enables endpoint naming patterns other than: + https://..core.windows.net + by explicitly specify the EndPoint used to configure the client. + If 'EndPoint' is not specified as an argument and an 'AccountName' is + provided then the 'AccountName' will be used to create a default endpoint. + If neither an 'EndPoint' or 'AccountName' argument is provided the + corresponding configuration file fields will be used with priority given + to "EndPoint". + + See also CONFIGURECREDENTIALS, LOADCONFIGURATIONSETTINGS +``` + +### initialize + +```text +INITIALIZE Configure logger and version test at Client builder entry points + This function need only be invoked once per session when using the package. + It configures logging and proxy settings. + Note the logger is a singleton so prefixes may not correspond if multiple + packages are using it simultaneously. In this scenario a generic subprefix + may be helpful. + + Example + % Taken from createClient in the Key Vault interface + initialize('displayLevel', 'debug', 'loggerPrefix', 'Azure:KeyVault'); + + See: MATLAB/app/functions/Logger.m for more details. + + Other uses of initialize + + matlab.net.http.io.ContentConsumer/initialize + matlab.net.http.io.ImageConsumer/initialize + matlab.net.http.io.JSONConsumer/initialize + matlab.net.http.io.MultipartConsumer/initialize + matlab.net.http.io.StringConsumer/initialize + myDeployedModule/initialize + SimTimeseries/initialize + simulink.Simulation/initialize +``` + +### loadConfigurationSettings + +```text +LOADCONFIGURATIONSETTINGS Method to read a JSON configuration settings from a file + The file name must be as a specified argument. + JSON values must be compatible with MATLAB JSON conversion rules. + See jsondecode() help for details. A MATLAB struct is returned. + Field names are case sensitive. +``` + +Microsoft Azure Data Explorer, Azure Data Lake Storage & Azure Key Vault are trademarks of the Microsoft group of companies. + +------ + +**Copyright 2022-2024 The MathWorks® Inc.** + +[//]: # (Documentation generation settings: ) +[//]: # (* Including class level help text ) +[//]: # (* Including constructor help text ) +[//]: # (* Excluding inherited methods ) +[//]: # (* Excluding default MATLAB classes ) +[//]: # (* Generated: 10-Sep-2024 12:33:29 ) diff --git a/Documentation/html/_sources/Authentication.md.txt b/Documentation/html/_sources/Authentication.md.txt new file mode 100644 index 0000000..6f06b70 --- /dev/null +++ b/Documentation/html/_sources/Authentication.md.txt @@ -0,0 +1,459 @@ +# Authentication + +Azure® supports a variety of authentication methods. These can be invoked +specifically or as a series of failover attempts in a so-called provider-chain. + +Azure Data Explorer authentication support includes some of the features described +below, it is described in more detail in [ADXAuthentication.md](ADXAuthentication.md). + +When working with high level functions like `createStorageClient` or +`createKeyVaultClient`, these will automatically perform the authentication and +then use these credentials to automatically create the service specific clients. +The authentication details are read from JSON Configuration files as also +discussed in [Configuration.md](Configuration.md). Each service has its own +filename for its default JSON configuration file. Most functions also accept an +alternative configuration filename as input. The configuration files may contain +service specific non-authentication related options as well. + +See the service specific documentation to learn more about the default filename +for each service and how to provide an alternative filename if desired. + +See the sections below to learn more about which settings need to be added in +the JSON configuration files for the various authentication methods. + +Alternatively, if not using the high level functions for creating service +specific clients and using the Client *Builders* instead, the Credential objects +can still first be build using the `configureCredentials` function (which is in +fact also used internally by the higher level functions). This function must be +called with a specific configuration filename as input, e.g.: + +```matlab +credentials = configureCredentials('myCredentialConfiguration.json') +``` + +Again, see the sections below on what options need to be configured in the file +for the different authentication methods. + +Lastly, it is also possible to build Credential objects on the lowest level with +the help of Credential *Builders*; see the [APIReference](APIReference.md) for +more details on these classes. This approach does not require any configuration +files. + +The following authentication approaches are supported: + +1. [Azure CLI](#azure-cli) +2. [Managed Identity](#managed-identity) +3. [Client Secret](#client-secret) +4. [Environment Variable](#environment-variable) +5. [Shared Token Cache](#shared-token-cache) +6. [Interactive Browser](#interactive-browser) +7. [Device Code](#device-code) +8. [Default Azure](#default-azure) +9. [Storage Shared Key](#storage-shared-key) +10. [Connection String](#connection-string) +11. [Chained Token](#chained-token) + +## Azure CLI + +This approach uses credentials used to previously authenticate to the Azure CLI +tool when the ```az login``` command is used. The Azure CLI login process +supports a number of authentication processes many of which are common to this +package. + +### Sample ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "AzureCli" +} +``` + +For more information on the CLI see: [Azure CLI +site](https://docs.microsoft.com/en-us/cli/azure/) + +## Managed Identity + +Managed identities provide an identity for the Azure resource in Azure Active +Directory (Azure AD) and use it to obtain Azure AD tokens. Thus identities do +not have to be directly managed by the developer or end user. This can be +particularly useful in a deployed scenario as credentials should not be embedded +in a compiled MATLAB® application or CTF file, rather the application can in +effect derive its credentials by virtue of the machine hosting it in Azure. + +### Managed Identity ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "ManagedIdentity", + "ClientId" : "8118ee", +} +``` + +In the case of a system assigned managed identity the Azure portal refers to the +ClientId value as the "Application ID". In the case of a user assigned managed +identity the ClientId value is referred to as a "Client ID" in the Azure portal. + +An identity's Resource ID can be provided as an alternative to the Client ID. +Both should not be provided. The corresponding configuration file setting field +is ResourceId. + +## Client Secret + +A Client Secret credential is an Azure AD credential that acquires a token with +a client secret. The secret can be provided in the form as a string specified as +```ClientSecret``` or can be a certificate referred to by ```PemCertificate```. + +### Client Secret ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "ClientSecret", + "TenantId" : "99d1e6", + "ClientId" : "8118ee", + "ClientSecret": "i6Qp72", //Either + "PemCertificate": "c:/path/to/clientCert.pem", //Or + "AuthorityHost": "https://myauthority.com/" //Optional +} +``` + +## Environment Variable + +With Environment Variable based credentials the variables must be set in the +process used to start MATLAB® such that the variables apply to the JVM which is +configured when MATLAB starts and is not affected by MATLAB ```setenv``` calls. +The following combinations of credentials are accepted: + +1. AZURE_CLIENT_ID, AZURE_CLIENT_SECRET & AZURE_TENANT_ID +2. AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH & AZURE_TENANT_ID +3. AZURE_CLIENT_ID, AZURE_USERNAME & AZURE_PASSWORD + +Environment Variable credentials can often be used in CI/CD based processes. +Additional note the support for a certificate file path. + +### Environment Variable ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "Environment", + "AuthorityHost": "https://myauthority.com/" //Optional +} +``` + +## Shared Token Cache + +With `SharedTokenCacheCredential`, credentials are read from a cache saved on +disk (Windows®) or GNOME keyring (Linux). It _is_ possible to work with Shared +Token Cache directly, in which case the tokens need to already exist in the +cache. _However_, in more practical situations it is recommended to use Shared +Token Cache in combination with an other authentication method like Interactive +Browser or Device Code. + +Interactive Browser and Device Code can be configured in such a way that they +will store the tokens which they obtain interactively in the cache. +`configureCredentials` will then also configure these workflows to first try to +read the token from the cache, such that if the token already exists in the +cache, these methods do not have to go through their interactive flow anymore +and they can complete without user interaction. + +Specifying a cache `Name` is optional, `TokenCachePersistenceOptions` can be +provided as empty object. In this case the default name "msal" is used on +Windows and "MSALCache" on Linux. + +### Shared Token Cache ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "SharedTokenCache", + "TenantId" : "99d1e6", + "ClientId" : "8118ee", + "TokenCachePersistenceOptions" : { + "Name": "myMATLABCache" //Optional + } +} +``` + +## Interactive Browser + +When Interactive Browser credentials are used an Azure Active Directory +credential acquires a token for an Azure AD application by prompting the login +in the default browser. When authenticated, the oauth2 flow will notify the +credential of the authentication code through the reply URL. The application to +authenticate to must have delegated user login permissions and +have```http://localhost:port``` listed as a valid Redirect URI for the Azure +App. + +### TokenCachePersistenceOptions (Interactive Browser) + +Interactive Browser can optionally be configured with +`TokenCachePersistenceOptions`. When these are configured, +`configureCredentials` will actually build and return a `ChainedTokenCredential` +object instead of an `InteractiveBrowserCredential`. The first option in this +chain will be a `SharedTokenCacheCredential` and the second option an +`InteractiveBrowserCredential` configured to persist the tokens it obtains in +the same cache. + +When using this the very first time, the token will not exist in the cache and +the Interactive Browser workflow will be executed interactively. This will then +store the obtained token in the cache. If the same authentication method is then +used again later, the token _can_ be read from the cache and the authentication +flow will complete without needing any action from the end-user. + +### Interactive Browser ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "InteractiveBrowser", + "TenantId" : "99d1e6", + "ClientId" : "8118ee", + "RedirectUrl": "http://localhost:8765", + "AuthorityHost": "https://myauthority.com/", //Optional + "TokenCachePersistenceOptions" : { //Optional + "Name": "myMATLABCache" //Optional + } +} +``` + +## Device Code + +`DeviceCodeCredential` enables authentication to Azure AD using a device code +that the user can enter into +[https://microsoft.com/devicelogin](https://microsoft.com/devicelogin). + +Note that in general the actual authentication provided through the credential +objects is only executed when the client (KeyClient, BlobClient, etc.) requires +it (typically on the first operation you perform using the client). In general +the Azure Java SDK follows this same workflow when working with Device Code +Credentials. However, in MATLAB specifically, MATLAB will _not_ be able to +display the device code while other client code is already running, so MATLAB +requires the Device Code authentication to be explicitly performed _before_ +passing the credentials to a client. This also means MATLAB cannot rely on the +client to automatically request the correct scope by itself and therefore it is +required to specify the correct scopes in the configuration file. Scopes are +entered as an array of strings. + +### Scopes + +Azure DataLake Storage Gen2 typically requires the +`https://storage.azure.com/.default` scope. + +Key Vault typically requires the `https://vault.azure.net/.default` scope. + +> **_NOTE:_** it is **not** possible to request access to multiple different +> resources (services) in one authentication call. This is a limitation from the +> Azure end and not specific to this package. +> +> I.e. it is **not** possible to request both +> `https://storage.azure.com/.default` _and_ `https://vault.azure.net/.default` +> Scopes simultaneously to obtain a single Credential object which is then +> usable with both Storage clients as well as Key Vault clients. Separate +> Credential objects will have to be obtained for the different Scopes and then +> passed to the different Clients. + +### Building *and* authenticating + +`configureCredentials` will automatically build the `DeviceCodeCredential` +object _and_ authenticate it for the scopes configured in the settings file. The +`DeviceCodeCredential` object which is returned will be "pre-authenticated" in +that sense. + +By default the instructions for the end-user on how to complete the device code +authentication flow are printed to the Command Window. An optional +`'DeviceCodeCallback'` Name-Value input pair can be passed to +`configureCredentials` to specify a custom callback function for displaying the +device code instructions: + +```matlab +credentials = configureCredentials('settings_DeviceCode.json',,... + 'DeviceCodeCallback',@myExampleCallbackFunction); +``` + +This callback will then be called during the authentication flow with an +`azure.identity.DeviceCodeInfo` object as input. Use the information provided in +this object to display instructions to the end user on how to complete the +authentication flow. Or for example use this to automatically copy the code to +clipboard and open a browser: + +```matlab +function myExampleCallbackFunction(deviceCodeInfo) + % Simply still print to instructions to the Command Window + disp(deviceCodeInfo.getMessage) + % But also copy the code to the clipboard + clipboard("copy",deviceCodeInfo.getUserCode); + % And open a browser + web(deviceCodeInfo.getVerificationUrl); +``` + +### TokenCachePersistenceOptions (Device Code) + +Device Code can optionally be configured with `TokenCachePersistenceOptions`. +When these are configured, `configureCredentials` will actually build and return +a `SharedTokenCacheCredential` object instead of a `DeviceCodeCredential`. The +internal workflow is as follows then: + +1. A `SharedTokenCacheCredential` is built and MATLAB uses it to try to obtain a + valid token for the specified scope from the cache. If this succeeds the + `SharedTokenCacheCredential` is returned immediately without any end-user + interaction. + +2. If no token could be obtained from the cache, a `DeviceCodeCredential` is + built and configured to store obtained tokens in the cache _and_ it is then + authenticated for the requested scope. This will require the end-user to + perform the authentication interactively. Once this interactive flow has + completed, the tokens which were obtained during this, will have been stored + in the cache, so it sufficient now for `configureCredentials` to return the + `SharedTokenCacheCredential` and there is no need to return the + `DeviceCodeCredential`. + +### Device Code ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "DeviceCode", + "TenantId" : "99d1e6", + "ClientId" : "8118ee", + "Scopes": [ + "https://storage.azure.com/.default" + ], + "AuthorityHost": "https://myauthority.com/", //Optional + "TokenCachePersistenceOptions" : { //Optional + "Name": "myMATLABCache" //Optional + } +} +``` + +## Default Azure + +A ```DefaultAzureProviderCredential``` attempts to create a credential using +environment variables or the shared token cache. It tries to create a valid +credential in the following order: + +1. EnvironmentCredential +2. ManagedIdentityCredential +3. SharedTokenCacheCredential +4. IntelliJCredential +5. VisualStudioCodeCredential +6. AzureCliCredential +7. Fails if none of the credentials above could be created. + +The chained token provider allows for customization of this process (see below). +Note in the following JSON config file the ManagedIdentityClientId, TenantId and +AuthorityHost are optional fields depending on which means of authentication is +expected to be used. + +### Default Azure ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "DefaultAzure", + "TenantId" : "99d1e6", //Optional + "ManagedIdentityClientId" : "8118ee", //Optional + "AuthorityHost": "https://myauthority.com/" //Optional +} +``` + +## Storage Shared Key + +This approach is only supported/relevant when working with Azure Storage +workflows and can for example _not_ be used when working with Azure Key Vault +workflows. + +This approach creates a ```StorageSharedKeyCredential``` containing an account's +name and its primary or secondary accountKey. The ```accountName``` is the +account name associated with the request and the ```accountKey``` is the account +access key used to authenticate the request. + +To obtain the primary or secondary key: + +1. Sign in to the Azure portal. +2. Locate the storage account. +3. In the account's settings section, select "Access keys", showing the access + keys and the connection string for each key. +4. Select the "Key" string value for key1 or key2 and copy the value. + +### Storage Shared Key ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "StorageSharedKey", + "AccountKey" : "lrdg==", + "AccountName" : "at" +} +``` + +Connection String is a form of ```StorageSharedKeyCredential``` where the +credential is simply the connection string. + +## Connection String + +This approach is only supported/relevant when working with Azure Storage +workflows and can for example not be used when working with Azure Key Vault +workflows. + +A connection string contains all the relevant connection properties, like the +account name and authentication information in one big string. The +authentication information can be in the form of a Storage Shared Key or a SAS +signature. + +To obtain a connection string based on Storage Shared Key: + +1. Sign in to the Azure portal. +2. Locate the storage account. +3. In the account's settings section, select "Access keys", showing the access + keys and the connection string for each key. +4. Select the "Connection string" value for key1 or key2 and copy the value. + +To obtain a connection string based on a SAS signature: + +1. Sign in to the Azure portal +2. Locate the storage account +3. In the account's settings section, select "Shared access signature". +4. Configure the permissions and access properties as required/desired and click + "Generate SAS and connection string". +5. Select the "Connection string" value and copy the value. + +### Connection String ```myServiceSpecificSettings.json``` + +```json +{ + "AuthMethod": "ConnectionString", + "ConnectionString": "DefaultEndpointsProtocol=https;g==;EndpointSuffix=core.windows.net" +} +``` + +Alternatively the connection string can be passed as an environment value as +follows: On Windows using cmd: + +```bat +setx AZURE_STORAGE_CONNECTION_STRING "" +``` + +Or on Linux/macOS using bash: + +```bash +export AZURE_STORAGE_CONNECTION_STRING="" +``` + +## Chained Token + +Using a Chained Token provider allows a list of token based credential providers +to be built such that the authentication process will fall through the providers +until successful or the list is exhausted. Connection String and Storage Shared +Key approaches are not token based. Credentials are built in the usual way but +rather than being used directly they are *added* to the +```chainedTokenCredentialBuilder``` in descending order of preference. This +builder is then built and the result provides the client's credentials. + +```matlab +chainedTokenCredentialBuilder = chainedTokenCredentialBuilder.addLast(clientSecretCredentials); +chainedTokenCredentials = chainedTokenCredentialBuilder.build(); +serviceClientBuilder = serviceClientBuilder.credential(chainedTokenCredentials); +``` + +In this case multiple settings files are used to build the individual +credentials by passing a specific path e.g.: + +```matlab +clientSecretCredentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ClientSecret.json')); +``` + +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Blob.md.txt b/Documentation/html/_sources/Blob.md.txt new file mode 100644 index 0000000..3d83636 --- /dev/null +++ b/Documentation/html/_sources/Blob.md.txt @@ -0,0 +1,614 @@ +# Blob Storage + +Blob storage is the most common use case for Azure® Data Lake Storage Gen2. This +package provides a low-level interface to blob storage and provides capabilities +not available in shipping MATLAB®. This package supersedes a previously published +blob storage low-level interface +[https://github.com/mathworks-ref-arch/matlab-azure-blob](https://github.com/mathworks-ref-arch/matlab-azure-blob). +Specifically this interface targets Gen2 storage APIs and the Azure v12 SDK +rather than the previous generation of APIs and the v8 SDK. While the older +interface referenced above provides some forward compatibility with Gen2 it is +strongly recommended that this interface be used when working with Gen2 blob +storage. While conceptually quite similar the APIs are not backwardly compatible +as a consequence of significant changes in the underlying Azure APIs. + +## Blob Clients + +The concept of a *Client* is central to how blob storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy: + +1. ```BlobServiceClient``` - This highest level client addresses the level of + blob service itself. +2. ```BlobContainerClient``` - This client primarily supports operations at the + container level. +3. ```BlobClient``` - The lowest level client supports operations at the blob + level. + +And there is a fourth `BlobLeaseClient` which can be used in conjunction with +`BlobContainerClient` or `BlobClient` for managing leases on blobs and +containers. + +Client objects are created and configured using corresponding *Builder* objects. +There is overlap in functionality between the various clients and there may +often be more than one way to accomplish a given operation e.g. creating a +container. + +Detailed information on the underlying client APIs can be found here: [Blob +Client +SDK](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/apidocs/index.html?com/azure/storage/blob/package-summary.html). +This interface exposes a subset of the available functionality to cover common +use cases in an extensible way. + +A higher-level function *createStorageClient()* is provided to help build the +various clients, see: [DataLakeStorageGen2.md](DataLakeStorageGen2.md) + +## Blob Service Client + +A ```BlobServiceClient``` can be created using `createStorageClient` as follows: + +```matlab +serviceClient = createStorageClient(); +``` + +or build on a lower level using `BlobServiceClientBuilder`: + +```matlab +% Create the client's builder +builder = azure.storage.blob.BlobServiceClientBuilder(); + +% configureCredentials is a convenience method that simplifies creating a credentials +% argument for the client's builder. In this case a Connection String is used to +% authenticate. Other authentication methods may required different build steps. +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); +builder = builder.connectionString(credentials); + +% Use a default Netty HTTP client and proxy settings as per MATLAB's proxy preferences +builder = builder.httpClient(); + +% The service client can now be built and then used +serviceClient = builder.buildClient(); +``` + +### Common Service Client operations + +For a full list of supported service client methods consult the API +documentation or call ```methods()``` on the client object or see the +[APIReference.md](APIReference.md) file. + +```matlab +%% Listing containers + +% Returns an array of BlobContainerItem objects that describe the containers in +% the current account +results = serviceClient.listBlobContainers(); +% Assuming non-empty results show the name of the first container +results(1).getName() +``` + +```matlab +%% Create & Delete a container +% The service client creates a container with a given name an returns +% a corresponding BlobContainerObject +containerClient = serviceClient.createBlobContainer(containerName); + +% We can use that client to test the container's existence +tf = containerClient.exists(); + +% The service client can the delete the container +serviceClient.deleteBlobContainer(containerName); + +% Or alternatively the BlobContainerClient can do the deletion +containerClient.deleteContainer(); +``` + +## Shared Access Signature Generation + +In Azure, Shared Access Signatures or SASs are an important means of granting +access to resources via URLs and strings that are easily shared. There are +various types of SASs, see: + +[https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature](https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature) + +Which type of SAS you can generate depends on how the client is authenticated: + +* When authenticated with [Storage Shared + Key](Authentication.md#storage-shared-key) you can generate *account-level* + and *service-level* SAS using `BlobServiceClient.generateAccountSas` and + `BlobClient.generateSas`. + +* When authenticated with [Connection + String](Authentication.md#connection-string) (which is basically "using a + SAS") or [with a SAS + directly](#create-a-client-using-a-sas-for-authentication) you cannot + *generate* any SAS at all but the SAS which you already have may simply be + reusable. + +* When authenticated using any other method (in which the client is essentially + authenticated as a specific user or service principal) you can generate *user + delegation* SAS. + +The following example shows how to generate a *service-level* SAS for a +container: + +```matlab +% Create a service client +builder = azure.storage.blob.BlobServiceClientBuilder(); +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_StorageSharedKey.json')); +builder = builder.credential(credentials); +builder = builder.httpClient(); +endpoint = ['https://', credentials.getAccountName(), '.blob.core.windows.net']; +builder = builder.endpoint(endpoint); +serviceClient = builder.buildClient(); + +% Define the access permissions to associate with the signature +permissions = azure.storage.common.sas.AccountSasPermission(); +permissions = permissions.setListPermission(true); +permissions = permissions.setReadPermission(true); + +% Define the resource type as a container +resourceTypes = azure.storage.common.sas.AccountSasResourceType(); +resourceTypes = resourceTypes.setContainer(true); + +% Define the Azure data services to which the SAS applies +services = azure.storage.common.sas.AccountSasService(); +services = services.setBlobAccess(true); +services = services.setFileAccess(true); + +% Set the expiry time of the SAS for 24 hours from now, note a timezone is required +expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1); + +% Create a AccountSasSignatureValues to combine the above values +sasValues = azure.storage.common.sas.AccountSasSignatureValues(expiryTime, permissions, services, resourceTypes); + +% Create the SAS +% Note the service client must have been authenticated via a StorageSharedKeyCredential +% to allow it to generate a SAS +sas = serviceClient.generateAccountSas(sasValues); +``` + +And the following example shows how to generate a *user delegation* SAS for a +specific Blob: + +```matlab +% Create a BlobClient using the convenience function (it is also possible +% to use the Builders). As an example a configuration for +% InteractiveBrowser authentication is used (any method which authenticates +% as user or service principal should do though). +blobClient = createStorageClient('ContainerName','my-container',... + 'BlobName','my-blob.txt',... + 'ConfigurationFile','myInteractiveBrowserSetting.json'); + +%% First obtain the UserDelegationKey using BlobServiceClient +% Obtain a service client for the given blob and its container +serviceClient = blobClient.getContainerClient.getServiceClient; +% Obtain a UserDelegationKey which is valid for, as an example, 1 hour +userKey = serviceClient.getUserDelegationKey(datetime('now'),... + datetime('now')+hours(1)); + +%% Configure the desired permissions for the SAS +% Start with empty BlobSasPermission +permissions = azure.storage.blob.sas.BlobSasPermission(); +% As an example, add read permissions +permissions = permissions.setReadPermission(true); +% Create the SAS signature, again for a validity of 1 hour +sasValues = azure.storage.blob.sas.BlobServiceSasSignatureValues(... + datetime('now')+hours(1), permissions); + +%% Generate the full signed SAS +sas = blobClient.generateUserDelegationSas(sasValues,userKey); + +%% Do something with the SAS +% As an example now generate a full URL with which the blob can be accessed +% and which can be shared with others +URL = [blobClient.getBlobUrl '?' sas]; + +%% Or which can for example be used with copyFromUrl +% Create a blob client for a new blob +newBlobClient = createStorageClient('ContainerName','my-container',... + 'BlobName','copy-of-my-blob.txt',... + 'ConfigurationFile','myInteractiveBrowserSetting.json'); +% And actually create it by copying the other blob +newBlobClient.copyFromUrl(URL); +``` + +## Blob Container Client + +A *BlobContainerClient* appears very similar to a service client both in +creation and operation. + +```matlab +% Create using createStorageClient +containerClient = createStorageClient('ContainerName','mycontainername'); +``` + +or: + +```matlab +% Create the Client using its builder +builder = azure.storage.blob.BlobContainerClientBuilder(); + +% Again using connection string based authentication +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); + +builder = builder.connectionString(credentials); +builder = builder.httpClient(); +builder = builder.containerName("mycontainername"); +containerClient = builder.buildClient(); +``` + +### Common Container Client operations + +#### List blobs in a container + +```matlab +% With the client in place it can be used to list the blobs within its corresponding +% container + +% List the blobs in the container +results = containerClient.listBlobs; +% Display the name of the 1st blob assuming the container is not empty +results(1).getName() +``` + +See also [Advanced listing support](#advanced-listing-support) below. + +#### Create a BlobClient + +```matlab +% Get a blob name and create a client using it +results = containerClient.listBlobs; +% Assume there is a blob with name: +results(1).getName(); + +% Create the corresponding BlobClient +blobClient = client.getBlobClient(results(1).getName()); +``` + +## Blob Client + +The *BlobClient* appears very similar to the other clients in creation and +operation. + +```matlab +% Create using createStorageClient +containerClient = createStorageClient('ContainerName','mycontainername',... + 'BlobName','myblobname.txt'); +``` + +or: + +```matlab +% Create the client builder +builder = azure.storage.blob.BlobClientBuilder(); + +% Configure the builder +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); +builder = builder.connectionString(credentials); +builder = builder.httpClient(); +builder = builder.containerName("mycontainername"); +builder = builder.blobName("myblobname.txt"); + +% Create the client +blobClient = builder.buildClient(); +``` + +### Common Blob Client operations + +#### Test if a blob exists + +```matlab +tf = blobClient.exists(); +``` + +#### Get a URL for a blob + +```matlab +urlStr = blobClient.getBlobUrl(); +``` + +#### Create a client using a SAS for authentication + +```matlab +builder = azure.storage.blob.BlobClientBuilder(); +builder = builder.sasToken(sas); +builder = builder.httpClient(); +builder = builder.endpoint(endpoint); +builder = builder.containerName("mycontaintername"); +builder = builder.blobName("myblobname.txt"); +blobClient = builder.buildClient(); +``` + +#### Upload & download a blob + +```matlab +uploadFile = 'C:\mydir\myfile.mat'; +[~, fileName, ext] = fileparts(uploadFile); +% The blob name and filename need not match but they typically do +blobName = [fileName, ext]; +builder = azure.storage.blob.BlobClientBuilder(); +builder = builder.connectionString(credentials); +builder = builder.httpClient(); +builder = builder.containerName('mycontainername'); +builder = builder.blobName(blobName); +blobClient = builder.buildClient(); + +% Upload the file to the blob overwriting any existing blob of that name +blobClient.uploadFromFile(uploadFile, 'overwrite', true); + +% Download the blob to a temporary location +downloadFile = [tempname,'.mat']; +blobClient.downloadToFile(downloadFile, 'overwrite', true); +``` + +#### Copy a blob using a SAS + +```matlab +% Create a client for the source blob +builder = azure.storage.blob.BlobClientBuilder(); +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_StorageSharedKey.json')); +builder = builder.credential(credentials); +builder = builder.httpClient(); +builder = builder.containerName("sourcecontainer"); +builder = builder.blobName("sourceblob.txt"); +srcClient = builder.buildClient(); + +% Create a service-level read only SAS valid for 24 hours +permissions = azure.storage.blob.sas.BlobSasPermission(); +permissions = permissions.setReadPermission(true); +expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1); +sasValues = azure.storage.blob.sas.BlobServiceSasSignatureValues(expiryTime, permissions); +srcSas = srcClient.generateSas(sasValues); + +% Build the full SAS URL by appending the SAS to the blob URL, note the '?' +srcUrl = srcClient.getBlobUrl(); +srcStr = append(srcUrl, '?', srcSas); + +% Create a container & respective client for the destination blob +builder = azure.storage.blob.BlobContainerClientBuilder(); +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); +builder = builder.connectionString(credentials); +builder = builder.httpClient(); +builder = builder.containerName("destinationcontainer"); +containerClient = builder.buildClient(); +containerClient.create(); +destClient = containerClient.getBlobClient('destinationblob.txt'); + +% Finally copy the source blob to the destination +destClient.copyFromUrl(srcStr); +``` + +## Blob Lease Client + +`BlobLeaseClient` is created using `BlobLeaseClientBuilder` which can then build +the client based on an existing `BlobClient` or `BlobContainerClient`. +Optionally the `BlobLeaseClient` can be configured with a specific leaseId (e.g. +in order to then be able to release a lease previously created outside of MATLAB +or for which the `BlobLeaseClient` was cleared). + +```matlab +% Create BlobLeaseClient based on an existing BlobClient +% 'existingBlobClient' (created using the instructions above) +builder = azure.storage.blob.specialized.BlobLeaseClientBuilder; +builder = builder.blobClient(existingBlobClient); +% Optionally specify a specific leaseId +builder = builder.leaseId('60233c25-dc52-4b3a-a874-dc641b4877a9'); + +% Build the BlobLeaseClient +leaseClient = builder.buildClient(); +``` + +```matlab +% Create BlobLeaseClient based on an existing BlobContainerClient +% 'existingContainerClient' (created using the instructions above) +builder = azure.storage.blob.specialized.BlobLeaseClientBuilder; +builder = builder.containerClient(existingContainerClient); +% Optionally specify a specific leaseId +builder = builder.leaseId('60233c25-dc52-4b3a-a874-dc641b4877a9'); + +% Build the BlobLeaseClient +leaseClient = builder.buildClient(); +``` + +### Acquiring, renewing, changing, releasing and breaking leases + +The interface supports all Lease Blob operations as specified in the [Azure +documentation](https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob). + +```matlab +% Acquire a lease for 30 seconds +leaseId = leaseClient.acquireLease(30); +% Acquire a lease which never expires +leaseId = leaseClient.acquireLease(-1); +% Renew an active lease +leaseClient.renewLease(); +% Change a lease to a different leaseId +leaseClient.changeLease('195aaa29-d604-469b-93a4-80af769f4b03') +% Release an active lease +leaseClient.releaseLease(); +% Break a lease +leaseClient.breakLease(); +``` + +### Interacting with a Blob or Blob Container which has a lease on it + +When a Blob has a lease on it, certain interactions like deleting it or +overwriting it with a newly uploaded or copied file are only possible when that +operation is performed with the correct leaseId. The leaseId can be provided as +Name-Value input pair to the `deleteBlob`, `uploadFromFile` and `copyFromFile` +methods of `BlobClient` and the `deleteContainer` method of +`BlobContainerClient`. So a full workflow could become: + +```matlab +% Build a BlobClient +blobClient = createStorageClient('ContainerName','mycontainer','BlobName','myblob'); + +% Build a BlobLeaseClient based on this BlobClient +leaseClientBuilder = azure.storage.blob.specialized.BlobLeaseClientBuilder; +leaseClientBuilder = leaseClientBuilder.blobClient(blobClient); + +leaseClient = leaseClientBuilder.buildClient(); + +% Acquire a lease +leaseId = leaseClient.acquireLease(-1); + +% Upload a new file to overwrite the blob +blobClient.uploadFromFile('myfile.txt','overwrite',true,'leaseId',leaseId); + +% Delete the blob while the lease is active +blobClient.deleteBlob('leaseId',leaseId); +``` + +## Advanced listing support + +A basic listing of a container's contents can be done as follows: + +```matlab +% Get a blob name and create a client using it +results = containerClient.listBlobs; +% Assume there is a blob with name: +results(1).getName(); +``` + +This returns an array of BlobItems in a container, with folder structures flattened. The Java PagedIterable is consumed by the MATLAB `listBlobs` methods, while convenient this makes the method unsuitable for use with containers with very large numbers of blobs. Blob names are returned in lexicographic order. + +The `BlobItem.isPrefix` method can be used to determine if an entry is a directory or not. + +It is sometimes necessary to provide a more advanced query. This can be done using the following additions: + +* A directory name prefix +* An `azure.storage.blob.models.BlobListDetails` object +* An `azure.storage.blob.models.ListBlobsOptions` object + +### Using a prefix/directory + +`BlobContainerClient.listBlobsByHierarchy(directory)` Returns all the blobs and directories (prefixes) under the given directory (prefix). Directories will have `BlobItem.isPrefix()` set to true. Blob names are returned in lexicographic order. E.g. listing a container containing a 'foo' folder, which contains blobs 'foo1' and 'foo2', and a blob on the root level 'bar', will return the following results when prefix/directory is not set. + +* foo/ (isPrefix = true) +* bar (isPrefix = false) + +And will return the following results when prefix="foo/": + +* foo/foo1 (isPrefix = false) +* foo/foo2 (isPrefix = false) + +Alternatively the following arguments can be provided `BlobContainerClient.listBlobsByHierarchy(delimiter, options, timeout)`: + +* delimiter - The delimiter for blob hierarchy, "/" for hierarchy based on directories. "/" should be used in almost all circumstances. +* options - `ListBlobsOptions`, see below. +* timeout - A number of seconds timeout value beyond which a runtime exception will be raised. + +### ListBlobsOptions + +A `ListBlobsOptions` object allows the following criteria to be set: + +* `setDetails(blobListDetails)` further options see below. +* `setMaxResultsPerPage(maxResultsPerPage)` Specifies the maximum number of blobs to return, including all BlobPrefix elements. In practice the list methods consume the iterators, so unless working directly with the Java Handle methods this should be ignored. +* `setPrefix(prefix)` Filters the results to return only blobs whose names begin with the specified prefix. + +`set` methods return an updated `ListBlobsOptions` object. `get` methods are also provided. + +### BlobListDetails + +Allows specifying of additional information to be returned with each blob when listing blobs in a container (via a BlobContainerClient object). This type is immutable to ensure thread-safety of requests, so changing the details for a different listing operation requires construction of a new object. + +`get` methods return logicals and `set` methods return an updated `BlobListDetails` object. + +* `getRetrieveCopy()` Whether blob metadata related to any current or previous Copy Blob operation should be included in the response. +* `getRetrieveDeletedBlobs()` Whether blobs which have been soft deleted should be returned. +* `getRetrieveDeletedBlobsWithVersions()` Whether blobs which have been deleted with versioning. +* `getRetrieveImmutabilityPolicy()` Whether immutability policy for the blob should be returned. +* `getRetrieveLegalHold()` Whether legal hold for the blob should be returned. +* `getRetrieveMetadata()` Whether blob metadata should be returned. +* `getRetrieveSnapshots()` Whether snapshots should be returned. +* `getRetrieveTags()` Whether blob tags should be returned. +* `getRetrieveUncommittedBlobs()` Whether blobs for which blocks have been uploaded, but which have not been committed using Put Block List, should be included in the response. +* `getRetrieveVersions()` Whether versions should be returned. + +## Blob properties & metadata + +A blob's properties can be queried reason about the blob, e.g. check its MD5 or size. +In this case the file/object is 0 bytes in size. + +```matlabsession +>> myBlob = l(1) +myBlob = + BlobItem with no properties. +>> myProps = myBlob.getProperties; +>> myProps.getContentMd5 +ans = + '1B2M2Y8AsgTpgAmY7PhCfg==' +>> myProps.getContentLength +ans = + int64 + 0 +``` + +Use `methods()` on a properties object to explore the available data. + +```{note} +`properties` is a reserved word in MATLAB and should not be used as a variable name etc. +``` + +In this case the blob has no available metadata, an empty containers.Map is returned: + +```matlab +% Create a Container client +client = builder.buildClient(); +% Create a BlobListDetails to control what blob details are returned when listing +b = azure.storage.blob.models.BlobListDetails(); +% Enable Metadata & Tags +b = b.setRetrieveMetadata(true); +b = b.setRetrieveTags(true); +% Create a ListBlobsOptions to hold the BlobListDetails +l = azure.storage.blob.models.ListBlobsOptions(); +lnew = l.setDetails(b); + +% Return a list of blobs, "/" is teh delimiter and 60 is a timeout in seconds +l = client.listBlobsByHierarchy("/", lnew, 60); + +% Pick one of the returned blobs +myBlob = l(1); +% Get the Metadata +md = myBlob.getMetadata +md = + Map with properties: + Count: 1 + KeyType: char + ValueType: char +% Display the containers.Map content in this case a tag +md.keys +ans = + 1×1 cell array + {'barMetadataKey'} +K>> md.values +ans = + 1×1 cell array + {'barMetadataVal'} + +% Get the tag directly and display the containers.Map content +tags = myBlob.getTags +tags = + Map with properties: + Count: 1 + KeyType: char + ValueType: char +tags.keys +ans = + 1×1 cell array + {'barMetadataKey'} +tags.values +ans = + 1×1 cell array + {'barMetadataVal'} +``` + +For more information, see [https://azuresdkdocs.blob.core.windows.net/$web/java/azure-storage-blob/12.21.0/com/azure/storage/blob/BlobContainerClient.html#listBlobs()](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-storage-blob/12.21.0/com/azure/storage/blob/BlobContainerClient.html#listBlobs()) + +## Custom EndPoints + +Typically and by default Azure storage endpoints follow the pattern: `https://AccountName.Type.core.windows.net`, e.g. `https://mystorageaccount.blob.core.windows.net`. However, endpoints may vary e.g. if using Azure Government or private endpoints, which are respectively `https://AccountName.Type.core.usgovcloudapi.net` and `https://AccountName.privatelink.Type.core.windows.net`. If configuring a client builder then the `endpoint()` method can be used to set such an endpoint directly. By default if using the `createStorageClient()` function it will use the account name and storage type to create a default endpoint. This can be overridden by passing an `EndPoint` named value argument pair or by setting and "EndPoint" field in the JSON configuration file used to provide settings and credentials. + +For details of private endpoint use see: [https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints](https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints) + +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Configuration.md.txt b/Documentation/html/_sources/Configuration.md.txt new file mode 100644 index 0000000..91113b3 --- /dev/null +++ b/Documentation/html/_sources/Configuration.md.txt @@ -0,0 +1,55 @@ +# Configuration + +The package offers a `loadConfigurationSettings` function which allows reading +configuration settings from a short JSON format file. This provides a convenient +way to configure various settings (like endpoint URLs) without having to +hardcode these into MATLAB® code. By convention settings are stored in the +`Software/MATLAB/config` directory. When calling `loadConfigurationSettings` the +name of the configuration file must be provided as input, e.g.: + +```matlab +settings = loadConfigurationSettings('mysettings.json'); +``` + +If only a filename is provided the function will search for the file on the +MATLAB path. Alternatively a full absolute path can be provided as well. + +An example `mysettings.json` file could look something like the following: + +```json +{ + "myURL": "https://www.mathworks.com" +} +``` + +And then in MATLAB this could be used as: + +```matlab +settings = loadConfigurationSettings('mysettings.json'); +homePage = webread(settings.myURL); +``` + +## Authentication + +The `configureCredentials` function for creating Azure® Credentials objects +relies on `loadConfigurationSettings` as well, it uses this same function to +read its settings from a JSON configuration file. Typically both Authentication +and other settings are in fact kept in a single JSON file. See +[Authentication](Authentication.md) for more details on authentication specific +configuration options as used by `configureCredentials`. + +## Service specific settings + +Service specific functions may rely on other additional configuration settings +as well. And they typically work with a service specific default filename for +the JSON file. But in most cases alternative filenames can be provided as well. + +See the service specific documentation pages for more information on service +specific settings, the default JSON filename and how to provide an alternative +configuration file name if needed: + +* [Key Vault](KeyVault.md) +* [Data Lake Storage Gen2](DataLakeStorageGen2.md) +* [Azure Data Explorer](DataExplorer.md) + +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/DataExplorer.md.txt b/Documentation/html/_sources/DataExplorer.md.txt new file mode 100644 index 0000000..233b4a5 --- /dev/null +++ b/Documentation/html/_sources/DataExplorer.md.txt @@ -0,0 +1,11 @@ +# Azure Data Explorer + +* [Getting Started](ADXGettingStarted.md) +* [Authentication](ADXAuthentication.md) +* [Null Data](NullData.md) +* [Dynamic Data](Dynamics.md) +* [Performance](Performance.md) +* [OpenAPI Client Generation](OpenAPI.md) +* [API Reference](APIReference.md) + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/DataLakeStorageGen2.md.txt b/Documentation/html/_sources/DataLakeStorageGen2.md.txt new file mode 100644 index 0000000..9d796ad --- /dev/null +++ b/Documentation/html/_sources/DataLakeStorageGen2.md.txt @@ -0,0 +1,161 @@ +# Azure Data Lake Storage Gen2 + +The MATLAB® Azure™ Data Lake Storage Gen2 interface is a low-level interface +that supports: + +* Blob +* Queue +* File Data Lake + +The documentation below is split into separate files [Blob Storage](Blob.md), +[Queue Storage](Queue.md) and [File Data Lake Storage](File.md). + +MATLAB's IO operations increasingly support access to Blob Storage via builtin +interfaces, e.g. the ```dir``` command supports accessing remote data: + +* [https://www.mathworks.com/help/matlab/ref/dir.html](https://www.mathworks.com/help/matlab/ref/dir.html), +* [https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html](https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html). + +Where MATLAB supports the required operations directly it is recommended to use +that built in functionality. + +## `createStorageClient` function + +The `createStorageClient` function can be used for creating BlobServiceClient, +BlobContainerClient, BlobClient, QueueServiceClient, QueueClient, +DataLakeFileSystemClient, DataLakeDirectoryClient and DataLakeFileClient. + +```matlab +% Create a BlobServiceClient with default options +blobServiceClient = createStorageClient(); +% Create a BlobContainerClient with default options +blobContainerClient = createStorageClient('ContainerName','myContainer'); +% Create a BlobClient with default options +blobClient = createStorageClient('ContainerName','myContainer',... + 'BlobName','myBlob') +% Create a QueueServiceClient with default options. +queueServiceClient = createStorageClient('Type','QueueService') +% Create a QueueClient with default options. +queueClient = createStorageClient('QueueName','myQueue') +% Create a DataLakeFileSystemClient with default options. +dataLakeFileSystemClient = createStorageClient('FileSystemName','myFileSystem') +% Create a DataLakeDirectoryClient with default options. +dataLakeDirectoryClient = createStorageClient('FileSystemName','myFileSystem',... + 'DirectoryName','my/dir') +%Creates a DataLakeFileClient with default options. +dataLakeFileClient = createStorageClient('FileSystemName','myFileSystem',... + 'FileName','my/dir/file') +``` + +By default `createStorageClient` reads Credential information and the Account +Name (used to build the Client endpoint) from a configuration file named +`storagesettings.json`. The function automatically searches for this file on the +MATLAB path. It is possible to specify a different filename using +`'ConfigurationFile'`. It is also possible to provide `'Credentials'` or +`'SASToken'` and `'AccountName'` as inputs to the function directly in which +case no configuration file may be needed. See the Name, Value pairs below for +more details. + +### Name, Value pairs + +Additional Name, Value pairs can be supplied to configure non-default options: + +**`'Type'`**, explicitly specify the type of client to create. Required for + creating `QueueServiceClient`. In all other cases the type of client is + derived from whether `'ContainerName'`, `'BlobName'`, `'QueueName'`, + `'FileSystemName'`, `'DirectoryName'`, and/or `'FileName'` are provided. + With none of these configured a `BlobServiceClient` is created. If only + BlobContainer is specified a `BlobContainerClient` is created, if both + BlobContainer and BlobName are specified a `BlobClient` is created. If + QueueName is specified a `QueueClient` is created. If only + FileSystemName is specified a `DataLakeFileSystemClient` is created, if + DirectoryName is specified as well, a `DataLakeDirectoryClient` is + created, or if FileName is specified a `DataLakeFileClient` is created. + +_Possible Values:_ `'BlobService'`, `'BlobContainer'`, `'Blob'`, + `'QueueService'`, `'QueueClient'`, `'DataLakeDirectory'`, `'DataLakeFile'`, + or `'DataLakeFileSystem'`. + +**`'ConfigurationFile'`**, explicitly specify which configuration file to use. +This file is used for configuring Credentials (when not supplied as input) +and/or Account Name (when not supplied as input). + +_Default Value:_ `'storagesettings.json'` + +**`'Credentials'`**, explicitly specify credentials to use. This for example +allows building multiple clients based on the same credentials without having to +go through (interactive) authentication again. If neither this option nor +`'SASToken'` is specified, `createStorageClient` uses `configureCredentials` +with 'ConfigurationFile' as input to first configure credentials before building +the client. + +_Hint:_ `configureCredentials` can be used to build valid Credentials. + +Example: + +```matlab +credentials = configureCredentials('myCredentials.json'); +client1 = createStorageClient('Credentials',credentials,'ContainerName','container1') +client2 = createStorageClient('Credentials',credentials,'ContainerName','container2') +``` + +**`'SASToken'`**, explicitly specify a SAS Token to use for authentication rather + than reading authentication details from a configuration file or a + credentials object passed in through the `'Credentials'` option. If neither + this option nor `'Credentials'` are specified, `createStorageClient` uses + `configureCredentials` with 'ConfigurationFile' as input to first configure + credentials before building the client. + +**`'AccountName'`**, explicitly specify the AccountName used to configure the +endpoint for the client. If not specified `createStorageClient` uses +`loadConfigurationSettings` to load configuration options from +`'ConfigurationFile'`. This file must then contain a "AccountName" setting. + +## Configuration options + +The higher-level functions for this service use the same kind of configuration +options as discussed in [Configuration.md](Configuration.md). The service +specific options are discussed below. + +The `AzureStorageExplorer` function requires `LocalPathToStorageExplorer` to be +set and it should point to your locally installed StorageExplorer.exe. The +`createStorageClient` function may use `AccountName` if not specified in the +call to `createStorageClient`. For example: + +```json +{ + "LocalPathToStorageExplorer" : "C:\\Program Files (x86)\\Microsoft Azure Storage Explorer\\StorageExplorer.exe", + "AccountName": "mystorageaccount" +} +``` + +The default name of the JSON file which `createStorageClient` works with is +`storagesettings.json`. + +The clients for the various services follow a common design pattern with +considerable overlap. Blob is documented in the greatest detail and is should be +referred to even if using the other APIs. + +## Multi-protocol access + +If accessing storage via various clients and protocols it is important to consider +how this differs from pre Gen2 capabilities, the following Azure documentation +is recommended: + +* [https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-multi-protocol-access](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-multi-protocol-access) +* [https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) + +## Low Level Interfaces + +% This section includes the relevant sub pages in the HTML version of the documentation, please ignore when viewing the Markdown page itself. + +```{toctree} +--- +maxdepth: 1 +--- +Blob +Queue +File +``` + +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Deployment.md.txt b/Documentation/html/_sources/Deployment.md.txt new file mode 100644 index 0000000..f24d8f1 --- /dev/null +++ b/Documentation/html/_sources/Deployment.md.txt @@ -0,0 +1,102 @@ +# MATLAB Compiler (SDK) Deployment + +When compiling MATLAB™ code, in general, [MATLAB Compiler™](https://www.mathworks.com/products/compiler.html) will do a dependency analysis of the code and automatically include all the necessary files. However in the case of this package, because Java components are used [which need to be loaded on the static Java class path](Installation.md#configuring-the-matlab-java-class-path), additional steps are required. + +Three options are discussed below for making the correct JAR-files available to the deployed component. + +* The [first option](#option-one-compile-the-jar-file-into-the-standalone-component) is the easiest but will add the JAR-file to the *end* of the static class path; see the [installation documentation](Installation.md#configuring-the-matlab-java-class-path) to learn more about what limitations this may introduce depending on the platform. + +* The [second option](#option-two-modified-javaclasspathtxt-and-distribute-jar-file-next-to-component) can add the JAR-file to the *front* of the static Java class path but is more involved. + +* The [last option](#option-three-make-jar-file-available-in-matlab-runtime) adds the JAR-file to the MATLAB Runtime installation rather than include it with the component, making it available to all standalone components using that MATLAB Runtime installation. + +```{hint} +Contact us at [mwlab@mathworks.com](mailto:mwlab@mathworks.com) if you require additional advice on your specific use-case of deploying MATLAB Code which makes use of the "MATLAB Interface *for Azure Services*". +``` + +## Option One: Compile the JAR-file *into* the standalone component + +Any JAR-file which is compiled into a MATLAB Compiler (SDK) standalone component will automatically be added to the Java static[1](#option-three-make-jar-file-available-in-matlab-runtime) class path at runtime of the component. This will add the JAR-file to the *end* of the Java class path though, which on Windows should not be a problem but may introduce [limitations on Linux](Installation.md#configuring-the-matlab-java-class-path). + +To compile the JAR-files into the component, in the Application- or Library Compiler App under "Files required for your application to run" (or when working with `mcc`, using the `-a` argument), explicitly add the following files to the component, they will not be added by automatic dependency analysis: + +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` + +Where `$MATLABROOT` stands for the MATLAB installation directory as returned by running the `matlabroot` function in the MATLAB Command Window. + +## Option Two: Modified `javaclasspath.txt` and distribute JAR-file *next to* component + +During the [installation](Installation.md) of the package, a [`javaclasspath.txt` will have been created](Installation.md#configuring-the-matlab-java-class-path) in the MATLAB preferences directory, with the following content: + +```xml + +/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar +``` + +This `javaclasspath.txt` from the preferences directory *can* be included in MATLAB Compiler (SDK) standalone components and *will* then actually be used at runtime of the component. The problem however is that this typically refers to an absolute path which exists on the development machine but which will likely *not* exist on target machines to which the standalone component is deployed. + +However, the `javaclasspath.txt` file can be updated to the following before compiling the standalone component: + +```{code-block} xml +--- +emphasize-lines: 3 +--- + +/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar +./azure-common-sdk-0.2.0.jar +``` + +Where the line which added at the bottom basically says: load `azure-common-sdk-0.2.0.jar` from `./` which stands for "the current directory". + +Now when compiling a standalone component with this updated `javaclasspath.txt`, that component can load the JAR-file from either the specified absolute location *or* "the current directory at runtime of the standalone component". Where "the current directory at runtime" is typically quite simply equal to the directory where the main executable is located. + +Further, for this workflow, in the Application- or Library Compiler App under "Files required for your application to run" (or when working with `mcc`, using the `-a` argument), explicitly add the following files to the component: + +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` +* `$PREFDIR/javaclasspath.txt` + +Where `$PREFDIR` stands for the MATLAB preferences directory as returned by running the `prefdir` function in the MATLAB Command Windows. Depending on the exact MATLAB Compiler version, *some* versions may already include `$PREFDIR/javaclasspath.txt` *automatically*; by adding it *explicitly* though, this approach should work in *all* supported releases. + +And then, if working with [MATLAB Compiler (SDK) packaged installers](https://www.mathworks.com/help/compiler/files-generated-after-packaging-application-compiler.html), under "Files installed for your end user", add: + +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` + +The packaged installer will then place the JAR-file next to the standalone component during installation. Alternatively, if not working with the packaged installers, simply manually distribute `azure-common-sdk-0.2.0.jar` next to the standalone component itself, in the same directory. + +## Option Three: Make JAR-file available in MATLAB Runtime + +JAR-files can only be added to the *static* class path upon initialization of the MATLAB Runtime. In use cases where multiple standalone components are used in a single application, there will be only *one* MATLAB Runtime instance which is instantiated upon first interaction with the first component. If a component is loaded after initial initialization of the MATLAB Runtime, its JAR-files are added to the *dynamic* class path rather than the static class path. Unfortunately `azure-common-sdk-0.2.0.jar` *must* be loaded on the *static* class path though. + +In some situation, for example when working with multiple MATLAB Compiler Java/.NET/Python modules in a single Java/.NET/Python application, this is simply something to "keep in mind" and it may be possible to ensure that the right component is loaded first. However, this can not always be *guaranteed*, especially in [MATLAB Production Server](https://www.mathworks.com/products/matlab-production-server.html) workflows, where it is not possible to predict which component will be called first inside which worker process. In such situations an option could be to add the JAR-file to the MATLAB Runtime such that it is *always* loaded, regardless of which exact component instantiated this runtime first. + +First, at compile time, again add the following two files to the "Files required for your application to run" (or using `mcc`'s `-a` flag): + +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j.properties` +* `matlab-azure-services/Software/MATLAB/lib/jar/log4j2.xml` + +Then, manually copy the following three files to the target machine onto which the component will be deployed: + +* `matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-api.jar` +* `$MATLABROOT/java/jarext/slf4j/slf4j-log4j12.jar` + +The files can basically be placed anywhere on this machine as long as they are accessible by the runtime. Lastly, also on the target machine where the MATLAB Runtime has been installed, open `$MCRROOT/toolbox/local/classpath.txt` (where `$MCRROOT` stands for the installation directory of the MATLAB Runtime) in a text editor and add the full absolute locations of the three files to the *front* of the list of JAR-files and directories in the text file. + +````{note} +The `toolbox/local/classpath.txt` file contains a notification: + +``` +#DO NOT MODIFY THIS FILE. IT IS AN AUTOGENERATED FILE. +``` + +For this particular use-case, this can partly be ignored, the file *may* be edited but do indeed keep in mind that it may be changed or overwritten when reinstalling the MATLAB Runtime or installing an Update to the runtime. The modification may have to be reapplied afterwards. +```` + +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Dynamics.md.txt b/Documentation/html/_sources/Dynamics.md.txt new file mode 100644 index 0000000..3f26927 --- /dev/null +++ b/Documentation/html/_sources/Dynamics.md.txt @@ -0,0 +1,66 @@ +# Dynamic Data + +The Azure Data Explorer® Documentations describes the dynamic data type as follows: + +The dynamic scalar data type is special in that it can take on any value of other +scalar data types from the list below, as well as arrays and property bags. +Specifically, a dynamic value can be: + + * Null. + * A value of any of the primitive scalar data types: bool, datetime, guid, int, long, real, string, and timespan. + * An array of dynamic values, holding zero or more values with zero-based indexing. + * A property bag that maps unique string values to dynamic values. The property bag has zero or more such mappings (called "slots"), indexed by the unique string values. The slots are unordered. + +For further details see: [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic) + +When ADX returns dynamic data to MATLAB® the potentially varied nature of that data +means that such a column in a results table will be of type cell. +For reasons that will be described it may be preferred to not attempt convert the +dynamic data to an underlying type(s) but rather to simply return the value +of the the dynamic as a character vector. The optional argument `convertDynamics` +can be used to control this behavior, the default value is true, i.e. attempt to +convert the dynamic data. + +If automatic decoding of a value does not give the desired result it is recommended +that the values not be decoded and custom logic be implemented to do so using the +returned character vector values. + +If a dynamic is *not* to be converted the following approach is taken. + +* If the value is presents as a JSON array or object, the character vector value +is returned. +* If the value is a JSON null, the `NullPolicy` is applied, by default a `missing` +will be returned. +* Otherwise the character vector value is returned. + +If the dynamic value is to be converted this cannot be handled with the same certainty +as the conversion of other data types. The metadata returned from ADX does not +describe the contents of the value or provide a schema that might be used to decode +it. ADX does not have such information. Thus the automatic decoding should be +considered a best effort. When decoding dynamics the following steps are taken in +sequence: + +* If the value is a JSON primitive, Booleans will be converted to logicals and numbers +will be converted to doubles. Null policy is applied. Strings will be passed to MATLAB's `jsondecode` +function. If the `jsondecode` call fails the value will be returned as a character vector. +* If the value is a JSON null `NullPolicy` is applied and by default a `missing` +is returned. +* If the value is an empty JSON array `NullPolicy` is applied and by default a missing +is returned. Non empty JSON arrays are decoded using `jsondecode`, if that fails +the character vector value is returned. +* If the value is a JSON object is decoded using decoded using `jsondecode`, if that fails +the character vector value is returned. + +*Note:* + +* For more information on MATLAB's `jsondecode` function see: +[https://www.mathworks.com/help/matlab/ref/jsondecode.html](https://www.mathworks.com/help/matlab/ref/jsondecode.html) noting that it has limitations +* For further details on the handling of null values see [NullData.md](NullData.md). +* The additional processing of dynamic values as described inevitably has a performance +impact, if this is a concern consider approaches that alter the data being queried +or queries themselves such that non dynamic data types are used. + +The `testDynamic` test function in `/matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m` +shows some simple queries that used for dynamic testing purposes. + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/FAQ.md.txt b/Documentation/html/_sources/FAQ.md.txt new file mode 100644 index 0000000..bb6aaa6 --- /dev/null +++ b/Documentation/html/_sources/FAQ.md.txt @@ -0,0 +1,47 @@ +# Frequently Asked Questions + +## Azure Java SDK + +### How to change the underlying library logging level + +The Azure® interfaces rely on an number of underlying libraries which are +included in the `Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` Jar file. +Many of these libraries use slf4j as a logging mechanism. Further, MATLAB® itself +also includes slf4j and MATLAB configures it to use log4j as backend. So when +used in MATLAB, these libraries end up using sl4j with log4j as backend. Which +exact log4j version is used, depends on the MATLAB release. MATLAB releases up +to MATLAB R2021b Update 2 use log4j versions 1.x, MATLAB R2021b Update 2 and +newer use log4j versions 2.x. + +The logging level and destination of log4j versions 1.x can be controlled using +`Software/MATLAB/lib/jar/log4j.properties` and for log4j versions 2.x using +`Software/MATLAB/lib/jar/log4j2.xml`. By default they log at the `ERROR` level. +To change this to `INFO` for example use the following in `log4j.properties`: + +```text +log4j.rootLogger=INFO, stdout +``` + +or the following in `log4j2.xml`: + +```xml + +``` + +## Azure Data Explorer + +### BadRequest_StreamingIngestionPolicyNotEnabled error + +This error indicates a need to configure streaming ingestion on your Azure Data Explorer cluster. +See: [https://learn.microsoft.com/en-us/azure/data-explorer/ingest-data-streaming?tabs=azure-portal%2Ccsharp#choose-the-appropriate-streaming-ingestion-type](https://learn.microsoft.com/en-us/azure/data-explorer/ingest-data-streaming?tabs=azure-portal%2Ccsharp#choose-the-appropriate-streaming-ingestion-type) + +The queries described can be issued using this package. + +### Unable to resolve the name 'com.azure.identity.InteractiveBrowserCredentialBuilder' + +This error is likely to be proceeded by `Getting ingestion resources`, the probable cause in that +the Azure Services SDK jar file which is required for interactive authentication is not found +of the Java static classpath, review the output of the startup command which may refer to this +also. + +[//]: # (Copyright 2020-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/File.md.txt b/Documentation/html/_sources/File.md.txt new file mode 100644 index 0000000..b672058 --- /dev/null +++ b/Documentation/html/_sources/File.md.txt @@ -0,0 +1,215 @@ +# File Data Lake Storage + +The File Data Lake API currently has less implemented functionality than the equivalent +Blob and Queue APIs, where additional API calls are needed contact MathWorks. + +Relevant Azure® API/service documentation: + +* [https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) +* [https://docs.microsoft.com/en-us/java/api/overview/azure/storage-file-datalake-readme?view=azure-java-stable](https://docs.microsoft.com/en-us/java/api/overview/azure/storage-file-datalake-readme?view=azure-java-stable) + +## File Data Lake Clients + +The concept of a *Client* is central to how file storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy: + +1. Path +2. Filesystem +3. Directory +4. File + +## High-level Client Creation + +As with other services both high-level and low-level approaches for creating +various clients are supported. + +```matlab +% creates a DataLakeFileSystemClient with default options +client = createStorageClient('FileSystemName','myFileSystem'); +``` + +```matlab +% Creates a DataLakeDirectoryClient with default options +client = createStorageClient('FileSystemName','myFileSystem',... + 'DirectoryName','my/dir'); +``` + +```matlab +% Creates a DataLakeFileClient with default options +client = createStorageClient('FileSystemName','myFileSystem',... + 'FileName','my/dir/file'); +``` + +Additional Name, Value pairs can be supplied to configure non-default options. See: ```doc createStorageClient``` for more details. + +## URL Format + +File path are addressable using the following URL format: + +```https://myaccount.dfs.core.windows.net/myfilesystem/myfilepath``` + +Filesystems can be thought of as being similar to Blob Containers and Paths for +files or Directories as being similar to Blobs. + +## Build a Filesystem Client + +```matlab +% Read a shared storage key from a file +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json')); + +% Create a filesystem builder +builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder(); + +% Configure the builder's credentials, http client, endpoint and name +builder = builder.credential(credentials); +builder = builder.httpClient(); +endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net']; +builder = builder.endpoint(endpoint); +builder = builder.fileSystemName("myfilesystemname"); + +% Build the client +client = builder.buildClient(); +``` + +A very similar Path class, ```azure.storage.file.datalake.DataLakePathClientBuilder()``` exists. + +## Build a Filesystem Client to work with SASs + +```matlab +% Create some minimal permissions +FSSP = azure.storage.file.datalake.sas.FileSystemSasPermission(); +FSSP = FSSP.setListPermission(true); +FSSP = FSSP.setReadPermission(true); + +% Set the SAS to expire in 1 days +expiryTime = datetime('now', 'TimeZone', 'UTC') + days(1); +DLSSSV = azure.storage.file.datalake.sas.DataLakeServiceSasSignatureValues(expiryTime, FSSP); + +% Requires a shared storage key based client for SAS generation +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json')); + +% Build the client previously shown +builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder(); +builder = builder.credential(credentials); +endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net']; +builder = builder.endpoint(endpoint); +builder = builder.httpClient(); +builder = builder.fileSystemName("myfilesystemname"); +client = builder.buildClient(); + +% Use the client to generate a SAS +sasToken = client.generateSas(DLSSSV); + +% Return an array of azure.storage.file.datalake.models.PathItem +% detailing filesystem contents +paths = client.listPaths(); + +% Build a second client authenticated with the previoulsy creates SAS +builder2 = azure.storage.file.datalake.DataLakeFileSystemClientBuilder(); +builder2 = builder2.sasToken(sasToken); +endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net']; +builder2 = builder2.endpoint(endpoint); +builder2 = builder2.httpClient(); +builder2 = builder2.fileSystemName("myfilesystemname"); +client2 = builder2.buildClient(); + +% Perform an operation using it +paths = client2.listPaths(); +``` + +## SAS Permissions + +A *Path* SAS Permission is created as follows: + +```matlab +psp = azure.storage.file.datalake.sas.PathSasPermission(); +``` + +By default all permissions are disabled and the following methods return false: + +```matlab +psp.hasAddPermission(); +psp.hasCreatePermission(); +psp.hasDeletePermission(); +psp.hasExecutePermission(); +psp.hasListPermission(); +psp.hasManageAccessControlPermission(); +psp.hasManageOwnershipPermission(); +psp.hasMovePermission(); +psp.hasReadPermission(); +psp.hasWritePermission(); +``` + +There are corresponding set permission methods that accept a logical and return +and updated permission: + +```matlab +psp = psp.setCreatePermission(true); +``` + +A *File System* permission class with very similar functionality also exists: + +```matlab +fssp = azure.storage.file.datalake.sas.FileSystemSasPermission(); +``` + +## Directory Clients & misc. operations + +```matlab +% Begin by creating a Path Client +builder = azure.storage.file.datalake.DataLakePathClientBuilder(); +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json')); +builder = builder.credential(credentials); +endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net']; +builder = builder.endpoint(endpoint); +builder = builder.httpClient(); +builder = builder.fileSystemName("myfilesystemname"); +builder = builder.pathName('mydirectoryname'); +dirClient = builder.buildDirectoryClient(); + +% Check if the path exists +tf = Client.exists(); + +% Create a Directory Client from a Filesystem Client +builder = azure.storage.file.datalake.DataLakeFileSystemClientBuilder(); +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'myStorageSharedKey.json')); +builder = builder.credential(credentials); +endpoint = ['https://', credentials.getAccountName(), '.dfs.core.windows.net']; +builder = builder.endpoint(endpoint); +builder = builder.httpClient(); +builder = builder.fileSystemName("myfilesystemname"); +fsClient = builder.buildClient(); + +% Create Directory Client +existingDirClient = fsClient.createDirectory('myOtherDirectory', true); + +% Return the path & URL +path = existingDirClient.getDirectoryPath(); +url = existingDirClient.getDirectoryUrl(); + +% Delete the directory +existingDirClient.deleteDirectory(); + +% Create and Delete a subdirectory on the filesystem +level1DirClient = fsClient.createDirectory('level1', true); +level2DirClient = fsClient.createDirectory('level1/level2', true); +level1DirClient.deleteSubdirectory('level2'); +% verify using an exists() method +level2DirClient.exists(); + +% Create a File +level1DirClient = fsClient.createDirectory('level1', true); +level1FileClient = level1DirClient.createFile('tmpFile.txt', true); + +% Rename a directory from srcDir to dstDir +srcDirClient = fsClient.createDirectory('srcDir', true); +nullVal = []; +renamedDirClient = srcDirClient.rename(nullVal, 'dstDir'); +``` + +## Notes + +This API does not support storage accounts where hierarchical namespace (HNS) is disabled. + +[//]: # (Copyright 2022-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Installation.md.txt b/Documentation/html/_sources/Installation.md.txt new file mode 100644 index 0000000..ada0f01 --- /dev/null +++ b/Documentation/html/_sources/Installation.md.txt @@ -0,0 +1,90 @@ +# Installation + +## Clone this repository + +```bash +git clone https://github.com/mathworks-ref-arch/matlab-azure-services.git +``` + +## Build MATLAB Azure SDK Jar + +MATLAB® Interface *for Azure Services* depends on the Azure® Java SDK which, +together with some helper code, first needs to be packaged into the MATLAB Azure +Utility Library. Building this utility requires both a Java 1.8 SDK and Apache +Maven. + +The build process downloads a number of required 3rd party packages. The +specifics of which can be derived from the pom file. + +To build the utility using Maven: + +```bash +cd Software/Java +mvn clean package +``` + +The build should produce the file: `Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar` + +## Configuring the MATLAB Java class path + +Having built the SDK jar file, it must be included in the MATLAB Java class +path. The jar file must be added to the *static* class path. On Windows® the jar +file can be added at any position on the static class path, it can be added to +the start or at the end. On Linux the jar file must be added at the *start* of +the static java class path if `SharedTokenCacheCredential` and +`TokenCachePersistenceOptions` are used, if not, the jar file can be in any +position on the static java class path. + +```{note} +When making use of MathWorks features which can automatically add +jar files to the static class path, these typically add them to then *end* of +the static class path. For example when working with a [packaged custom +toolbox](https://www.mathworks.com/help/matlab/matlab_prog/create-and-share-custom-matlab-toolboxes.html) +the included jar file is added to the *end* of the static path in the end user +MATLAB installation. Or if working with MATLAB Compiler® (SDK) standalone +components the jar file which was packaged into the component are +automatically added to the *end* of the static class path at runtime. However +there may be situations in which this is not possible and then these features +may add the jar file to the dynamic class path. +``` + +In general the recommended approach to add the jar file to the static java class +path in a local MATLAB installation is to add an entry to the +`javaclasspath.txt` file in MATLAB's preferences directory. To create or open +this file in the MATLAB editor you can type the following command in the MATLAB +Command Window: + +```matlab +edit(fullfile(prefdir,'javaclasspath.txt')); +``` + +Add the following content to the file, noting: + +* Specific version numbers may change in future releases. +* Delimiters and path formats will change base on the operating system in use. +* Full absolute paths should be provided. +* Both the absolute full path of the JAR-file as well as the directory + containing the JAR are listed. The directory is added to make Log4j + configuration files available to MATLAB. +* The `` tag as shown below is optional and can be used to add the jar + file to the *start* of the path (see above for more details on when this is + needed). + +```xml + +/myfiles/matlab-azure-services/Software/MATLAB/lib/jar/azure-common-sdk-0.2.0.jar +``` + +To verify that the change has made been successfully, restart MATLAB and run the +`javaclasspath` command, the entries should be found at either the beginning or +the end of the output. + +To be able to use the interface, its directories need to be added to the +MATLAB path. To add the required directories run `startup.m` from the +`Software/MATLAB` directory. + +The interface should now be ready to be configured and used, see +[Authentication](Authentication.md) and [Configuration](Configuration.md) +for further details. + +[//]: # (Copyright 2022 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/KeyVault.md.txt b/Documentation/html/_sources/KeyVault.md.txt new file mode 100644 index 0000000..b93cfee --- /dev/null +++ b/Documentation/html/_sources/KeyVault.md.txt @@ -0,0 +1,397 @@ +# Azure Key Vault + +The MATLAB® Azure® Key Vault Interface enables the manipulation of Key Vault +Secrets and Keys from within MATLAB. Certificates are not currently supported. + +## Configuration options + +The higher-level client functions for this service use the same kind of configuration +options as discussed in [Configuration.md](Configuration.md). The service +specific options are discussed below. + +The `createKeyVaultClient` function may use `VaultName` if not +specified in the call to `createKeyVaultClient`, for example: + +```json +{ + "VaultName": "myvaultname" +} +``` + +The default name of the JSON file which `createKeyVaultClient` works with is `keyvaultsettings.json`. + +## `createKeyVaultClient` function + +`createKeyVaultClient` is a higher-level function for creating a `KeyClient` or +`SecretClient` + +```matlab +% Create a KeyClient with default options +keyClient = createKeyVaultClient('Type','Key') +% Create a SecretClient with default options +secretClient = createKeyVaultClient('Type','Secret') +``` + +By default `createKeyVaultClient` reads credential information and the vault +name from a configuration file named `'keyvaultsettings.json'`. The function +automatically searches for this file on the MATLAB path. It is possible to +specify a different filename using `'ConfigurationFile'`. It is also possible to +provide `'Credentials'` and `'VaultName'` as inputs to the function directly in +which case no configuration file may be needed. See the Name, Value pairs below +for more details. + +### Name, Value pairs + +Additional Name, Value pairs can be supplied to configure non-default options: + +**`'ConfigurationFile'`**, explicitly specify which configuration file to use. +This file is used for configuring Credentials (when not supplied as input) +and/or Account Name (when not supplied as input). + +_Default Value:_ `'keyvaultsettings.json'` + +**`'Credentials'`**, explicitly specify credentials to use. This for example +allows building multiple clients based on the same credentials without having to +go through (interactive) authentication again. If not specified, +`createKeyVaultClient` uses `configureCredentials` with 'ConfigurationFile' as +input to first configure credentials before building the client. + +_Hint:_ configureCredentials can be used to build valid Credentials. + +Example: + +```matlab +credentials = configureCredentials('myCredentials.json'); +keyClient = createKeyVaultClient('Credentials',credentials,'Type','Key') +secretClient = createKeyVaultClient('Credentials',credentials,'Type','Secret') +``` + +**`'VaultName'`**, explicitly specify the vault name for the client. If not +specified `createKeyVaultClient` uses `loadConfigurationSettings` to load +configuration options from `'ConfigurationFile'`. This file must then contain a +"VaultName" setting. + +## Creating a secret client + +A client is used to access secrets or keys in Key Vault. Certificates are not +currently supported. + +A number of steps are required to build a client. A higher-level function +*createKeyVaultClient()* is provided to simplify this process. A key or secret +client can be created as follows: + +If a configuration file path is not provided *createKeyVaultClient()* will +search the MATLAB path for a configuration file named ```keyvaultsettings.json```. + +```matlab +secretClient = createKeyVaultClient('Type','Secret'); +``` + +Here an optional non default configuration file path is provided. + +```matlab +secretClient = createKeyVaultClient('Type','Secret','ConfigurationFile','C:\myFiles\matlab-azure-key-vault\Software\MATLAB\config\ClientSecret.json') +``` + +A client can be created manually as follows if customized configuration is +required, this should rarely be necessary and if so using a custom higher-level +wrapper function similar to *createKeyVaultClient()* is recommended: + +```matlab +% Create a clientBuilder object, a SecretClient in this case +builder = azure.security.keyvault.secrets.SecretClientBuilder(); + +% Configure a credentials object based on a JSON config file +credentials = configureCredentials(which('azurekeyvault.json')); + +% Alternatively a KeyClientBuilder is created as follows: +% builder = azure.security.keyvault.keys.KeyClientBuilder(); + +% Configure the builder using its methods +builder = builder.credential(credentials); +builder = builder.httpClient(); +settings = loadConfigurationSettings(which('azurekeyvault.json')); +builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + +% Create the client +secretClient = builder.buildClient(); +``` + +A key client can be created similarly using the `Key` type: + +```matlab +keyClient = createKeyVaultClient('Type','Key') +``` + +## Listing secrets in a vault + +Secrets and keys have properties that can be obtained from Key Vault. + +```matlab +% Create a client +secretClient = createKeyVaultClient('Type','Secret'); + +% Get an array of secret properties +propList = secretClient.listPropertiesOfSecrets(); + +% Get the name property for the first entry +name = propList(1).getName(); +``` + +## Accessing a secret + +A secret value is easily accessed using the client. Note it is best practice to +clear a secretValue from memory once it is no longer needed and consider +carefully how that value is used, e.g. written to a file etc. Also use +semi-colons to prevent the value unintentionally being logged to MATLAB's +console or other logs. + +```matlab +% Create a client +secretClient = createKeyVaultClient('Type','Secret'); +% Get the secret using its name +secret = secretClient.getSecret('mySecretName'); +% Get the secret value +secretValue = secret.getValue(); +``` + +## Creating a secret + +Secrets are easily created using a name value pair. Note it is good practice to +_NOT_ include hardcoded secret values in code, contrary to this trivial example. + +```matlab +secretClient = createKeyVaultClient('Type','Secret'); +myNewSecret = secretClient.setSecret('mySecretName', 'mySecretValue'); +``` + +## Deleting a secret + +Deleting a secret is an asynchronous operation and a `SyncPoller` object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Deleting a secret is normally a +quick operation. + +```matlab +secretClient = createKeyVaultClient('Type','Secret'); + +% Start the process of deleting a secret +syncPoller = secretClient.beginDeleteSecret('mySecretName'); + +% Block until the delete complete or the 10 second timeout elapses. +% The timeout value is optional, but can prevent unexpected hangs. +syncPoller.waitForCompletion(10); +``` + +## Additional operations on secrets in Key Vaults with soft-delete enabled + +When working with key vaults with soft-delete enabled, deleted secrets can be +listed and recovered for a limited time, the default is 90 days but this can be +configured on a per key vault basis, or they can purged explicitly before this +time expires unless purge protection is enabled. + +### Listing deleted secrets + +```matlab +% Obtain the list of deleted secrets +deletedSecrets = secretClient.listDeletedSecrets(); +% Get the name of the first deleted secret +secretName = deletedSecrets(1).getName(); +% Check when the secret was deleted +deletedSecrets(1).getDeletedOn() +% Check when the secret is scheduled to be purged permanently +deletedSecrets(1).getScheduledPurgeDate() +``` + +> **Note:** The interface for Azure Key Vault follows the same design as +> Azure Key Vault Java SDK here, meaning that the returned `DeletedSecret` +> objects have the same methods as current secrets obtained with `getSecret`. So +> for example, they also have a `getValue` method. The Azure Key Vault Java SDK +> does not appear to actually return any values for deleted secrets however. To +> be able to obtain the value, first recover the secret and then query the value +> of the recovered secret. + +### Recovering a deleted secret + +Recovering a secret is an asynchronous operation and a `SyncPoller` object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Recovering a secret is normally a +quick operation. + +```matlab +% Start the process of recovering a secret +syncPoller = secretClient.beginRecoverDeletedSecret(secretName); +% Block until the recovery complete or the 10 second timeout elapses. +% The timeout value is optional, but can prevent unexpected hangs. +syncPoller.waitForCompletion(10); +``` + +### Purging a deleted secret + +Key vault names are globally unique. The names of secrets stored in a key vault +are also unique. So it is not possible to reuse the name of a secret that exists +in the soft-deleted state. Hence it can be preferred to purge a secret before it +is purged automatically on its scheduled purge date. + +```matlab +% Purge a deleted secret right now +secretClient.purgeDeletedSecret(secretName); +``` + +## Creating a key client + +A key client can be created as follows: + +```matlab +% Here an optional non default configuration file path is provided. +keyClient = createKeyVaultClient('Type','Key','ConfigurationFile','C:\myFiles\matlab-azure-services\Software\MATLAB\config\ClientSecret.json') +``` + +By default *createKeyVaultClient()* will search the MATLAB path for ```keyvaultsettings.json```. + +A client can be created manually as follows if customized configuration is +required, this should rarely be necessary and if so using a custom wrapper +script similar to *createKeyVaultClient()* is recommended: + +```matlab + +% Create a clientBuilder object, a KeyClient in this case +builder = azure.security.keyvault.keys.KeyClientBuilder(); + +% Configure a credentials object based on a JSON config file +credentials = configureCredentials(which('azurekeyvault.json')); + +% Configure the builder using its methods +builder = builder.credential(credentials); +builder = builder.httpClient(); +settings = loadConfigurationSettings(which('azurekeyvault.json')); +builder = builder.vaultUrl(sprintf('https://%s.vault.azure.net/',settings.VaultName)); + +% Create the client +keyClient = builder.buildClient(); +``` + +## Listing keys in a vault + +Keys have properties that can be obtained from Key Vault. + +```matlab +% Create a client +keyClient = createKeyVaultClient('Type','Key'); + +% Get an array of secret properties +properties = keyClient.listPropertiesOfKeys(); + +% Get the name property for the first entry +name = propList(1).getName(); +``` + +## Accessing a Key + +A key can be returned in a number of forms, see +azure.security.keyvault.keys.models.JsonWebKey _to_ methods. For +interoperability with other security libraries these methods return a Java key +object of varying types. + +```matlab +% Create a client +keyClient = createKeyVaultClient('Type','Key'); +% Get the key using its name +jsonWebKey = keyClient.getKey('myKeyName'); +% Convert the key to java.security.KeyPair RSA form +keyRsa = jsonWebKey.toRsa(false); +``` + +## Creating a key + +Keys are easily created using a name and key type. + +```matlab +keyClient = createKeyVaultClient('Type','Key'); +rsaKey = azure.security.keyvault.keys.models.KeyType.RSA; +key = keyClient.createKey('myTestRSAKey', rsaKey) +``` + +## Deleting a key + +Deleting a key is an asynchronous operation and a _SyncPoller_ object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or it times out. Deleting a key is normally a quick +operation. + +```matlab +keyClient = createKeyVaultClient('Type','Key'); + +% Start the process of deleting a key +syncPoller = keyClient.beginDeleteKey('myTestRSAKey'); + +% Block until the delete complete or the 10 second timeout elapses. +% The timeout value is optional, but can prevent unexpected hangs +syncPoller.waitForCompletion(10); +``` + +## Additional operations on keys in Key Vaults with soft-delete enabled + +When working with key vaults with soft-delete enabled, deleted keys can be +listed and recovered for a limited time, the default is 90 days but this can be +configured on a per key vault basis, or purged explicitly before this time +expires unless purge protection is enabled. + +### Listing deleted keys + +```matlab +% Obtain the list of deleted keys +deletedKeys = keyClient.listDeletedKeys(); +% Get the recovery ID of the first deleted key +recoveryId = deletedKeys(1).getRecoveryId(); +% Check when the key was deleted +deletedKeys(1).getDeletedOn() +% Check when the key is scheduled to be purged permanently +deletedKeys(1).getScheduledPurgeDate() +``` + +> **Note:** The interface for Azure Key Vault follows the same design as +> Azure Key Vault Java SDK here, meaning that the returned `DeletedKey` objects +> have the same methods as current keys obtained with `getKey`. So for example +> they also have a `getKey` and `getName` method. The Azure Key Vault Java SDK +> does not appear to actually return all values for deleted keys though. For a +> list of deleted keys obtained with `listDeletedKeys` it does not even appear +> to be able to return the name for delete keys with `getName`. In that sense +> the best option to obtain the name of a deleted key appears to be to use +> `getRecoveryId` and then parse the return URI: +> +> ```matlab +> % Use matlab.net.URI to help parse the returned ID +> recoveryURI = matlab.net.URI(deletedKeys(1).getRecoveryId()); +> % The name of the key should be the last part of the URI Path +> keyName = recoveryURI.Path{end}; +> ``` + +### Recovering a deleted key + +Recovering a key is an asynchronous operation and a `SyncPoller` object is +returned. This can be used in a number of ways but in this simple example the +code blocks until completion or times out. Recovering a key is normally a quick +operation. + +```matlab +% Start the process of recovering a secret +syncPoller = keyClient.beginRecoverDeletedKey(keyName); +% Block until the recovery complete or the 10 second timeout elapses. +% The timeout value is optional, but can prevent unexpected hangs. +syncPoller.waitForCompletion(10); +``` + +### Purging a deleted key + +Key vault names are globally unique. The names of keys stored in a key vault are +also unique. So it is not possible to reuse the name of a key that exists in the +soft-deleted state. Hence it can be preferred to purge a key before it is purged +automatically on its scheduled purge date. + +```matlab +% Purge a deleted key right now +keyClient.purgeDeletedKey(keyName); +``` + +[//]: # (Copyright 2021-2022 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/NullData.md.txt b/Documentation/html/_sources/NullData.md.txt new file mode 100644 index 0000000..b29d47c --- /dev/null +++ b/Documentation/html/_sources/NullData.md.txt @@ -0,0 +1,96 @@ +# Null data + +In ADX all data types except string may have null values indicating that data is +not present. When bringing such data into MATLAB® consideration must be given to +the potential presence of null values. This package provides a number of approaches +to dealing with this issue. + +Many MATLAB types support the concept of "missing" data where the `missing` *value* +can be used to identify data that is not available, see also `ismissing()`. +Other datatypes support `NaN` or `NaT` to indicate *anomalous* values. + +The enumeration class `mathworks.adx.NullPolicy` can be passed as an +option to query functions to control how nulls are handled in responses. The +possible values of the enumeration are defined in the following table: + +| Enumeration | Effect | +|:---------------|------------| +| ErrorAny | Error if any null values are detected | +| ErrorLogicalInt32Int64 | Error if null values are detected for logicals, int32s or int64s | +| AllowAll | All null types to map to missing, NaN or NaT for all data types | +| Convert2Double | Convert logicals, int32s, & int64s to doubles | + +The default behavior is defined by `ErrorLogicalInt32Int64`. + +Using the `AllowAll` policy has the effect of returning data as cell array values +This has an impact on memory and performance, for large queries altering the data +or the query to remove null may be preferable. + +The following table defines how an ADX null is translated to a MATLAB value +subject to the enumeration value. +As dynamics can be converted into other types this table assumes the valid value +is not converted and thus remains a cell array containing a character vector. + +| Kusto type | MATLAB type | ADX Value | ErrorAny | ErrorLogicalInt32Int64 | AllowAll | Convert2Double | +|:-----------|:------------|:----------|:------------|:-----------------------|:------------|:-------------------| +| bool | logical | null | error | error | {missing} | NaN | +| | | valid | logical | logical | {logical} | 0 or 1 as a double | +| int | int32 | null | error | error | {missing} | NaN | +| | | valid | int32 | int32 | {int32} | as a double | +| long | int64 | null | error | error | {missing} | NaN | +| | | valid | int64 | int64 | {int64} | as a double [N1] | +| datetime | datetime | null [N5] | error | NaT | NaT | NaT | +| | | valid | datetime | datetime | datetime | datetime | +| guid | string | null | error | missing | missing | missing | +| | | valid | string | string | string | string | +| real | double | null | error | NaN | NaN | NaN | +| | | valid | double | double | double | double | +| string | string | N/A [N3] | error | "" | "" | "" | +| | | N/A [N4] | "" | "" | "" | "" | +| | | valid | string | string | string | string | +| timespan | duration | null | error | NaN | NaN | NaN | +| | | valid | duration | duration | duration | duration | +| decimal | double | null | error | NaN | NaN | NaN | +| | | valid | double | double | double | double [N1] | +| dynamic | char [N2] | null | error | {missing} | {missing} | {missing} [N2] | +| | | valid | {char} [N2] | {char} [N2] | {char} [N2] | {char} [N2] | + +| Notes | | +| ----- | ---- | +| [N1] | Subject to loss of precision | +| [N2] | Assuming the value is not decode, see [Dynamics.md](Dynamics.md) | +| [N3] | Kusto does not store null strings, however metadata and commands can return null strings that still need to be converted to tables | +| [N4] | If the allowNullStrings argument is set the the nullPolicy is not applied a warning is issued, this can be used to enable different behavior in queries and commands for example | +| [N5] | When a datetime NaT is returned its timezone is set to UTC as per other datetimes | + +> Note that metadata tables returned along side conventional query results also +> adopt the null policy applied to the query result. + +The `testNulls` test function in `/matlab-azure-adx/Software/MATLAB/test/unit/testDataTypes.m` +shows some simple queries that can be used to easily return nulls for testing purposes. + +## Null error + +If a null is encountered, in this case a null long/int64 is returned when using a +null policy that does not support it an error such as the following is returned. +In this case a possible solution would be: +`mathworks.adx.run(myQueryString, mathworks.adx.NullPolicy.AllowAll)` +It may be preferable to resolve this issue in the query or the data set such that +the data returned to MATLAB is free of nulls. + +```matlabsession +>> [result, success] = mathworks.adx.run(myQueryString) +Error using mathworks.internal.adx.getRowWithSchema>convert2Int64 (line 237) +int64 null values are not supported when using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (2,18) +Error in mathworks.internal.adx.getRowWithSchema (line 50) + row{colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx); +``` + +>Tip: In the above error message the `(2,18)` indicates that the issue was detected +>in row 2 column 18. + +## References + +* [https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/null-values](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/null-values) + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/OpenAPI.md.txt b/Documentation/html/_sources/OpenAPI.md.txt new file mode 100644 index 0000000..c3647b5 --- /dev/null +++ b/Documentation/html/_sources/OpenAPI.md.txt @@ -0,0 +1,78 @@ +# Azure Data Explorer OpenAPI Spec + +This file documents the process of building the control plane OpenAPI based client. +*It is not expected that end users should need to use or be familiar with this workflow.* + +## Spec download + +See: [https://github.com/microsoft/azure-rest-api-specs/tree/kusto-demo/specification/azure-kusto/resource-manager](https://github.com/microsoft/azure-rest-api-specs/tree/kusto-demo/specification/azure-kusto/resource-manager) + +```bash +git clone https://github.com/Azure/azure-rest-api-specs.git +``` + +## AutoRest + +AutoRest is required to convert the spec from 2.0 to 3 + +### Install AutoRest + +See: [https://github.com/Azure/autorest/blob/main/docs/install/readme.md](https://github.com/Azure/autorest/blob/main/docs/install/readme.md) + +```bash +npm install -g autorest +``` + +### Convert Spec + +Use AutoRest to generate a spec. in v3.0 format + +```bash +cd azure-rest-api-specs/specification/azure-kusto/resource-manager +npx autorest --output-converted-oai3 +``` + +Creates a spec in: `azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable/<2022-11-11>` +where the data is the latest release folder + +## Generate a client using a MATLAB client + +```matlab +% Assuming the Java files have been built using maven +% In the openAPI Code generator package's directory +% cd Software/Java +% !mvn clean package + +% Run startup to configure the package's MATLAB paths +cd Software/MATLAB +startup + +buildControlPlaneClient +``` + +## Generate a client with npx + +Generally this approach is not required or preferred. + +Check openapitools version are at version 6.2.1 or greater. + +```bash +npx @openapitools/openapi-generator-cli version +``` + +```bash +# Change to OpenAPI client generation package directory +# Call the client generator +npx @openapitools/openapi-generator-cli --custom-generator ./Java/target/classes \ + generate -g MATLAB \ + -i /home//git/azure-rest-api-specs/specification/azure-kusto/resource-manager/generated/azure-kusto/resource-manager/Microsoft.Kusto/stable//kusto.json \ + -o KustoClient --package-name kusto | tee gen.log + ``` + +## Customize the Client + +* For now use find and replace across the generated files to get rid of apiVersion and subscriptionId such that they are no longer inputs and object properties instead. +* Remove "object" as a type in SkuDescription. +* Add auth to `presend()`. + +[//]: # (Copyright 2023-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Overview.md.txt b/Documentation/html/_sources/Overview.md.txt new file mode 100644 index 0000000..1e2e2b1 --- /dev/null +++ b/Documentation/html/_sources/Overview.md.txt @@ -0,0 +1,5 @@ +% This document includes the root README.md in the HTML version of the documentation. When viewing the Markdown version,please refer to [../README.md](../README.md) + +```{include} ../README.md +:relative-docs: Documentation/ +``` diff --git a/Documentation/html/_sources/Performance.md.txt b/Documentation/html/_sources/Performance.md.txt new file mode 100644 index 0000000..497a540 --- /dev/null +++ b/Documentation/html/_sources/Performance.md.txt @@ -0,0 +1,140 @@ +# Performance + +This package uses the [GSON](https://github.com/google/gson) Java library for +comprehensive JSON parsing, however this can have a performance impact when working +with queries that return large responses. If response times are slow and bandwidth +is not the issue the following should be considered: + +* In general only KQL queries should return sufficient volumes of data to exhibit +query times that dominate the inherent communication time. + +* Return the minimum amount of data. + +* Where convenient to do so structure queries to perform data formatting and +filtering on the server side. This takes advantage of the proximity to the data +and the scale of the Azure Data Explorer platform. + +* Ingesting from files or tables uses binary transfers, typically with optimized +binary parquet files, for larger volumes of data this is far more efficient than +repeated inline ingestion of small amounts of data. + +* Simple JSON responses may be parsed faster using a custom row decoder, see below +for more details. + +* Return int32s rather than int64s if precision is not a limitation. + +* Avoid supporting nulls data if data is know to not have null values. See: +[NullData](NullData.md) for more details. + +* The MATLAB [profiler](https://mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) +can be a good way to visualize what portions of query processing are consuming most time. + +* If responses contain [dynamic](Dynamics.md) fields where not all values returned +may be used consider decoding them at the time of use as needed rather than as +part of the query. + +* If getting direct access to the raw data return in response is required, this +can be accomplished using the lower-level functions. + +## Parallel Processing + +If Parallel Computing Toolbox is installed (use `ver` to check), then it can be +used to speed up the processing of KQL query rows. Use the optional `useParallel` +argument to enable this (default is `false`). Additionally a threshold of rows +can be applied below which Parallel processing will not be used. The default is 1000. +The best value for this threshold will depend on the content of the rows and whether +repeated large row count calls are made, some experimentation may be required. +This can also be used with custom row decoders. The default row decoder requires +a process based parpool. + +Here a parallel processing is enabled along with a custom row decoder, parallelism is applied for +queries returning 10000 rows or more. + +Example: + +```matlab +h = @mathworks.internal.adx.exampleCustomRowDecoder; +[result, success] = mathworks.adx.run(query, useParallel=true, parallelThreshold=10000, customRowDecoder=h); +``` + +## Custom row decoder + +If queries result in a simple JSON response then writing a custom decoder to +extract the required data rather than using the default decoder. + +A sample of such a decoder `/Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m` +is provided. This function handles an array of rows of the form: `[128030544,1.0,"myStringValue-1"]` +with fields of types int64, double and a string. + +It will not process other data and is intended for speed rather than strict correctness or robustness. + +The custom decoder is applied to the PrimaryResult rows field only. + +It is required to return a cell array of size number of rows by the number of +columns that can be converted to a MATLAB table with the given schema. + +It is not required to respect input arguments flags if foreknowledge of returned +data permits it. + +Custom row decoders can be applied to progressive and nonprogressive KQL API v2 +and KQL API v1 mode queries. + +When a custom decoder is not used the generic decoder `mathworks.internal.adxgetRowsWithSchema` +is used. + +A [function handle](https://mathworks.com/help/matlab/matlab_prog/creating-a-function-handle.html) +is used to pass a handle to the custom row decoder to the `run` or `KQLquery` commands. + +Example: + +```matlab +query = sprintf('table("%s", "all")', tableName); +crd = @mathworks.internal.adx.exampleCustomRowDecoder; +[result, success] = mathworks.adx.run(query, customRowDecoder=crd); +``` + +The `exampleCustomRowDecoder` example implements a Parallel Computing based `parfor` +based parallelization, this is not required but may be helpful. + +> Depending on the nature of the decoder code a process based pool may be required +> rather than a thread based pool. +> It is unlikely that a decoding process would benefit from a remote processing via +> a cluster based pool but this would be possible. + +## doNotParse parallel array processing (Experimental) + +A JSON array of `doNotParse` values being processed by `JSONMapper` must be checked +for paired double quotes added to some value types the gson `toString` method. +While trivial this can be slow if there are many elements for example, row values. + +An experimental flag (`useParallel`) can be set to true to enable parallel +processing of this step using `parfor` if Parallel Computing Toolbox is available. +The property can be set in: `/Software/MATLAB/app/system/+adx/+control/JSONMapper.m` +in the `fromJSON` method. + +## Skip parsing row array elements (skipRowsArrayDecode) + +>The following applies to v2 queries only. + +While the Rows array elements are not parsed by the the generation of a `adx.data.models.QueryV2ResponseRaw` +in a `adx.data.api.Query.queryRun` call prior to the generation of a MATLAB table, +as done by the higher-level `mathworks.adx.KQLQuery` function, the array +itself is parsed. + +If the optional named argument `skipRowsArrayDecode` is used with a `adx.data.api.Query.queryRun` +call then the frames are parsed but the Rows array itself is not. This enables +If parsing the Rows independently if needed in a performance optimal way. + +Example: + +```matlab +% Create a request +request = adx.data.models.QueryRequest(); +request.csl = "mytablename | take 100"; + +% Create the Query object and run the request +query = adx.data.api.Query(); +[code, result, response, id] = query.queryRun(request, apiVersion="v2", skipRowsArrayDecode=true); +``` + +[//]: # (Copyright 2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Queue.md.txt b/Documentation/html/_sources/Queue.md.txt new file mode 100644 index 0000000..a5df1f5 --- /dev/null +++ b/Documentation/html/_sources/Queue.md.txt @@ -0,0 +1,159 @@ +# Queue Storage + +QueueStorage is designed to provide durable message queueing for large +workloads. This package provides a low-level interface to queue storage and +provides capabilities not available in shipping MATLAB. This package supersedes +a previously published blob storage low-level interface +[https://github.com/mathworks-ref-arch/matlab-azure-blob](https://github.com/mathworks-ref-arch/matlab-azure-blob). +Specifically this interface target's Gen2 storage APIs and the Azure® v12 SDK +rather than the previous generation of APIs and the v8 SDK. While older +interface referenced above provides some forward compatibility with Gen2 it is +strongly recommended that this interface be used when working with Gen2 blob +storage. While conceptually quite similar the APIs are not backwardly compatible +as a consequence of significant changes in the underlying Azure APIs. + +## Queue Clients + +The concept of a *Client* is central to how queue storage is accessed. A +hierarchy of clients exist that target different levels of the storage +hierarchy: + +1. ```QueueServiceClient``` - This highest level client addresses the level of + queue service itself. +2. ```QueueClient``` - The lowest level client supports operations at the queue + level. + +Client objects are created and configured using corresponding *Builder* objects. +There is overlap in functionality between the various clients and there may +often be more than one way to accomplish a given operation. + +Detailed information on the underlying client APIs can be found here: [Queue Client SDK](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/apidocs/index.html?com/azure/storage/queue/package-summary.html). +This interface exposes a subset of the available functionality to cover common +use cases in an extensible way. + +A higher-level function *createStorageClient()* is provided to help build the +various clients. + +## `createStorageClient` function + +See the [`createStorageClient` description](DataLakeStorageGen2.md#createstorageclient-function) for more details. + +## Queue Service Client + +A ```QueueServiceClient``` can be created using `createStorageClient` as +follows: + +```matlab +qsc = createStorageClient('Type','QueueService'); +``` + +or build on a lower level using `QueueServiceClientBuilder`: + +```matlab +% Create the client's builder +builder = azure.storage.queue.QueueServiceClientBuilder(); + +% configureCredentials is a function that simplifies creating a credentials +% argument for the client's builder. In this case a Connection String is used to +% authenticate. Other authentication methods may required different build steps, +% e.g. setting an endpoint +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); +builder = builder.connectionString(credentials); + +builder = builder.httpClient(); +qsc = builder.buildClient(); +``` + +### Common Service Client operations + +For a full list of supported service client methods consult the API +documentation or call ```methods()``` on the client object or see the +[APIReference.md](APIReference.md) file. + +```matlab +% Create a Queue & its client +queueClient = qsc.createQueue('myqueuename'); +``` + +```matlab +% List queues +qList = qsc.listQueues(); +``` + +```matlab +% Delete a Queue & its client +qsc.deleteQueue('myqueuename'); +``` + +## Queue Client + +A ```QueueClient``` is created as follows: + +```matlab +% Create using createStorageClient +qc = createStorageClient('QueueName','myquename-123456'); +``` + +or: + +```matlab +% Create the Client's builder +builder = azure.storage.queue.QueueClientBuilder(); + +credentials = configureCredentials(fullfile(AzureCommonRoot, 'config', 'settings_ConnectionString.json')); + +builder = builder.connectionString(credentials); +builder = builder.httpClient(); +builder = builder.queueName("myquename-123456"); +qc = builder.buildClient(); + +``` + +### Common Queue Client operations + +```matlab +% Send a message +msgResult = qc.sendMessage('my test message'); +receipt = msgResult.getPopReceipt; + +``` + +```matlab +% Get insertion, expiration & next visible times +insertTime = msgResult.getInsertionTime(); +expireTime = msgResult.getExpirationTime(); +visibleTime = msgResult.getTimeNextVisible(); + +``` + +```matlab +% Receive a message +msg = qc.receiveMessage(); +``` + +```matlab +% Get insertion, expiration & next visible times +insertTime = msg.getInsertionTime(); +expireTime = msg.getExpirationTime(); +visibleTime = msg.getTimeNextVisible(); +``` + +```matlab +% Get the message count, id and receipt +count = msg.getDequeueCount(); +id = msg.getMessageId(); +receipt = msg.getPopReceipt; +``` + +```matlab +% Get the message text itself +text = msg.getMessageText(); +``` + +```matlab +% Clear all or delete a single message +qc.clearMessages(); +qc.deleteMessage(id, receipt); +``` + +[//]: # (Copyright 2022 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/README.md.txt b/Documentation/html/_sources/README.md.txt new file mode 100644 index 0000000..290e4ae --- /dev/null +++ b/Documentation/html/_sources/README.md.txt @@ -0,0 +1,22 @@ +# MATLAB Interface *for Azure Services* + +**Refer to the HTML documentation for the latest version of this help information with enhanced navigation, discoverability, and readability.** + +**** + +## Contents + +* [Overview](Overview.md) +* [Installation](Installation.md) +* [Configuration](Configuration.md) +* [Authentication](Authentication.md) +* Service specific documentation + * [Azure Data Lake Storage Gen2](DataLakeStorageGen2.md) + * [Azure Key Vault](KeyVault.md) + * [Azure Data Explorer](DataExplorer.md) +* [MATLAB Compiler (SDK) Deployment](Deployment.md) +* [Full API Reference](APIReference.md) +* [FAQ](FAQ.md) +* [References](References.md) + +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/References.md.txt b/Documentation/html/_sources/References.md.txt new file mode 100644 index 0000000..0624b3e --- /dev/null +++ b/Documentation/html/_sources/References.md.txt @@ -0,0 +1,19 @@ +# References + +In general the MATLAB interfaces follow the same design as the Azure® SDK for +Java. Thus it can be helpful to also consult the [Azure SDK for Java documentation](https://docs.microsoft.com/en-us/azure/developer/java/sdk) +to learn more about specific client interfaces, methods and authentication workflows. + +## Azure Storage + +* [Azure SDK for Java Reference Documentation](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-storage-blob/12.8.0/index.html) +* [Known issues with Azure Data Lake Storage Gen2](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-known-issues) + +## Azure Authentication + +* [Chained Token Credentials](https://docs.microsoft.com/en-us/java/api/com.azure.identity.chainedtokencredential?view=azure-java-stable) +* [Azure Identity Examples](https://docs.microsoft.com/en-us/java/api/overview/azure/identity-readme?view=azure-java-stable) +how-to-procure-tenant-id-client-id-and-client-secret-key-to-connect-to-microsoft-azure-data-lake-storage-gen2/) +* [Support Matrix](https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-requests-to-azure-storage) + +[//]: # (Copyright 2020-2022 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/Testing.md.txt b/Documentation/html/_sources/Testing.md.txt new file mode 100644 index 0000000..6e98dec --- /dev/null +++ b/Documentation/html/_sources/Testing.md.txt @@ -0,0 +1,181 @@ +# Unit Tests + +The package includes various MATLAB® Unit Tests for testing the different +interfaces and clients for the different Azure® services. These tests can be +found in `Software/MATLAB/test/unit` and they are further split into directories +for different Azure services as well as a `Common` directory: + +* `/Common` +* `/KeyVault` +* `/Storage` +* `/Adx` + +The unit tests for the different services may have different requirements. These +are documented on a per service basis below. + +Typically the tests will require an Azure App Registration with certain specific +permissions and a service specific resource with specific content and which is +accessible by the App's service principal. Details like the App Client ID, +Client Secret, Resource Account Name, etc. which can contain sensitive data, are +provided to the unit tests through environment variables. This also allows the +Unit Tests to be more securely included in CI/CD systems where one can typically +configure variables in a protected and secure way (e.g. through "Actions +secrets" on GitHub or "Masked/Protected Variables" on GitLab, etc.). + +It may be possible to use one single App for all different features. This App +will then have to meet all the requirements listed in the sections below. Even +with one App, it is still required to set/provide `AZURE_CLIENT_ID`, +`KEYVAULT_CLIENT_ID`, etc. separately but they could then all have the same +value to point to the same App. + +Some tests cannot run non-interactively (e.g. authentication tests which require +user interaction). These tests are automatically skipped if environment variable +`GITLAB_CI`=`true` is set. + +## `/Common` unit tests + +`Common` tests various common features like authentication and networking +features like proxy settings. + +> **NOTE:** the common features cannot be tested entirely independently, to be +> properly tested, the credentials or network configuration, etc. also need to +> be passed to at least one service specific client which is then interacted +> with. The `Common` unit tests, test against `BlobServiceClient`, +> `BlobContainerClient`, `BlobClient`, `QueueServiceClient` and `QueueClient` +> which are all `Storage` Data Lake Storage Gen2 related client. Hence these +> tests also require a storage account resource and corresponding environment +> variables. + +### `Common` Azure App Registration + +Configure an Azure App for which a Client Secret has been generated and a +Client Certificate has been registered. Ensure this App's service principal +is granted access to the storage account used for testing, see also +[Storage Account](#storage-account) below. And if also running the +interactive authentication tests make sure that for this App: + +* A Redirect Uri has been configured in the form of `http://localhost:PORT` + where *PORT* is configurable. +* `Allow public client flows` is enabled. +* `https://storage.azure.com/user_impersonation` API permissions have been + configured. + +### Azure CLI + +In order to be able to test Azure CLI credentials, Azure CLI must have been +installed and a user must have have already successfully logged in using `az +login`. + +> **NOTE:** The Azure CLI authentication test is skipped when +> `GITLAB_CI`=`true`. + +### `Common` Storage Account + +Configure a storage account as discussed under `Storage` Storage Account. + +When also running the interactive tests (including Azure CLI test), the +interactive user which you are logging in as, will also require `Contributor`, +`Storage Blob Data Contributor` and `Storage Queue Data Contributor` roles on +the storage account. + +### `Common` environment variables + +| Variable Name | Description | +|-------------------------|----------------------------------------------------| +| `COMMON_REDIRECT_URI` | Redirect URI as configured for App | + +As well as the `Storage` environment variables below. + +## `/Storage` Azure Data Lake Storage Gen2 unit tests + +### Azure App Registration + +In order to be able to run the Storage tests an App registration is required for +which: + +* A Client Secret has been generated. + +### Storage Account + +The storage account should contain three containers: + +* `containerempty` which should be empty + +* `containernotempty` which should contain two blobs *blob1.txt* and + *blob2.txt*. + +* `leasetest` which should contain a blob *file1.txt*. + +Further, make sure that the App's service principal is assigned `Contributor`, +`Storage Blob Data Contributor` as well as `Storage Queue Data Contributor` +roles on this account. + +### Connection String/SAS Token + +Under "Shared access signature" generate a signature with: + +* Allowed Services: "Blob" and "Queue" +* Allowed resource types: "Service", "Container" and "Object". +* Allowed permissions: All + +Choose an appropriate expiry date/time; Azure by default appears to suggest a +period of 6 hours which is relatively safe but not very convenient for testing. +Since the account should really only be used for testing anyway and should +not be used to store any sensitive data, it may be acceptable to significantly +increase the validity period in accordance with local security polices. + +Similarly one can configure specific allowed IP addresses. + +Once generated note down the "Connection string" and "SAS token". + +### `Storage` environment variables + +| Variable Name | Description | +|-----------------------------|------------------------------------------------| +| `STORAGE_CONNECTION_STRING` | "Connection string" obtained above | +| `STORAGE_ACCOUNT_KEY` | "SAS token" obtained above | +| `STORAGE_ACCOUNT_NAME` | Name of the storage account | +| `AZURE_CLIENT_ID` | Client ID of the Azure App | +| `AZURE_CLIENT_SECRET` | Client Secret which has been generated for the App | +| `AZURE_CLIENT_CERTIFICATE` | Base64 encoded PEM-format certificate as registered for the App | +| `AZURE_TENANT_ID` | Azure Tenant ID | + +## `/KeyVault` Azure Key Vault unit tests + +All KeyVault Unit Tests are performed using Client Secret authentication. There +are no interactive tests. + +### Key Vault Azure App Registration + +In order to be able to run the Key Vault tests an App registration is required +for which: + +* A Client Secret has been generated. + +### Key Vault Account + +A Key Vault account needs to exist: + +* On which soft-delete is enabled. + +* For a Key Vault with "Azure role-based access control" permissions model, the + App's service principal must be assigned `Key Vault Administrator` role. For a + Key Vault working with "Vault access policy" permission model the service + principal must have been granted all `Key Management Operations` and `Secret + Management Operations` permissions. + +* In which a secret named `anakin` with value `darth` needs to exist. + +* In which a RSA key named `kvtestkey` must exist (key size and actual value are + irrelevant). + +### `KeyVault` environment variables + +| Variable Name | Description | +|-------------------------|----------------------------------------------------| +| `KEYVAULT_CLIENT_ID` | Client ID of the Azure App | +| `KEYVAULT_CLIENT_SECRET`| Client Secret which has been generated for the App | +| `KEYVAULT_TENANT_ID` | Azure Tenant ID | +| `KEYVAULT_VAULT_NAME` | Name of the Key Vault | + +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/Documentation/html/_sources/index.rst.txt b/Documentation/html/_sources/index.rst.txt new file mode 100644 index 0000000..ca1057d --- /dev/null +++ b/Documentation/html/_sources/index.rst.txt @@ -0,0 +1,50 @@ +MATLAB Interface *for Azure Services* +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Overview + + Overview + +.. toctree:: + :maxdepth: 1 + :caption: Azure Data Explorer + + ADXGettingStarted + ADXAuthentication + NullData + Dynamics + Performance + OpenAPI + +.. toctree:: + :maxdepth: 1 + :caption: Azure Key Vault + + Installation + Configuration + Authentication + KeyVault + +.. toctree:: + :maxdepth: 1 + :caption: Azure Data Lake Storage Gen2 + + Installation + Configuration + Authentication + DataLakeStorageGen2 + File + Queue + +.. toctree:: + :maxdepth: 2 + :caption: Further topics + + Deployment + Testing + FAQ + APIReference + References + diff --git a/Documentation/html/_static/basic.css b/Documentation/html/_static/basic.css new file mode 100644 index 0000000..bf18350 --- /dev/null +++ b/Documentation/html/_static/basic.css @@ -0,0 +1,906 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/Documentation/html/_static/css/badge_only.css b/Documentation/html/_static/css/badge_only.css new file mode 100644 index 0000000..e380325 --- /dev/null +++ b/Documentation/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff b/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/Documentation/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff b/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/Documentation/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/Documentation/html/_static/css/fonts/fontawesome-webfont.eot b/Documentation/html/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/Documentation/html/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/Documentation/html/_static/css/fonts/fontawesome-webfont.svg b/Documentation/html/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/Documentation/html/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/html/_static/css/fonts/fontawesome-webfont.ttf b/Documentation/html/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/Documentation/html/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/Documentation/html/_static/css/fonts/fontawesome-webfont.woff b/Documentation/html/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/Documentation/html/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/Documentation/html/_static/css/fonts/fontawesome-webfont.woff2 b/Documentation/html/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/Documentation/html/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/Documentation/html/_static/css/fonts/lato-bold-italic.woff b/Documentation/html/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-bold-italic.woff differ diff --git a/Documentation/html/_static/css/fonts/lato-bold-italic.woff2 b/Documentation/html/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/Documentation/html/_static/css/fonts/lato-bold.woff b/Documentation/html/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-bold.woff differ diff --git a/Documentation/html/_static/css/fonts/lato-bold.woff2 b/Documentation/html/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-bold.woff2 differ diff --git a/Documentation/html/_static/css/fonts/lato-normal-italic.woff b/Documentation/html/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-normal-italic.woff differ diff --git a/Documentation/html/_static/css/fonts/lato-normal-italic.woff2 b/Documentation/html/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/Documentation/html/_static/css/fonts/lato-normal.woff b/Documentation/html/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-normal.woff differ diff --git a/Documentation/html/_static/css/fonts/lato-normal.woff2 b/Documentation/html/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/Documentation/html/_static/css/fonts/lato-normal.woff2 differ diff --git a/Documentation/html/_static/css/mathworks.css b/Documentation/html/_static/css/mathworks.css new file mode 100644 index 0000000..1f5a0b1 --- /dev/null +++ b/Documentation/html/_static/css/mathworks.css @@ -0,0 +1,64 @@ +/* Customizations */ +/* Copyright (c) 2020 MathWorks, Inc. */ +div.wy-side-nav-search { + background-color: #0076a8; +} + +/* Headings */ +h1 { + padding: 0 61px 2px 0; + margin-bottom: 16px; + border-bottom: 1px solid #cbcbcb; + background-position: right bottom; + background-repeat: no-repeat; + background-size: 58px; + color: #c45400; + font: normal normal 22px/1.136 Arial,Helvetica,sans-serif; +} + +articleBody span.caption-text { + padding-top: 5px; + margin-bottom: 8px; + color: #404040; + font: normal bold 17px/1.35 Arial, Helvetica, sans-serif; + border-bottom: 1px solid #ccc; +} + +h2, .h2 { + padding-top: 5px; + margin-bottom: 8px; + color: #404040; + font: normal bold 18px/1.35 Arial, Helvetica, sans-serif; + border-bottom: 1px solid #ccc; +} + +h3 { + display: block; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font: normal bold 17px/1.35 Arial, Helvetica, sans-serif; + font-weight: bold; +} + +h4 { + display: block; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font: normal bold 15px/1.35 Arial, Helvetica, sans-serif; + font-weight: bold; +} + + +/* +body { + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +*/ diff --git a/Documentation/html/_static/css/theme.css b/Documentation/html/_static/css/theme.css new file mode 100644 index 0000000..0d9ae7e --- /dev/null +++ b/Documentation/html/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/Documentation/html/_static/doctools.js b/Documentation/html/_static/doctools.js new file mode 100644 index 0000000..e509e48 --- /dev/null +++ b/Documentation/html/_static/doctools.js @@ -0,0 +1,326 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey + && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/Documentation/html/_static/documentation_options.js b/Documentation/html/_static/documentation_options.js new file mode 100644 index 0000000..2fa8c97 --- /dev/null +++ b/Documentation/html/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/Documentation/html/_static/file.png b/Documentation/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/Documentation/html/_static/file.png differ diff --git a/Documentation/html/_static/jquery-3.5.1.js b/Documentation/html/_static/jquery-3.5.1.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/Documentation/html/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + +

Index

+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2020-2024, MathWorks, Inc..

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/index.html b/Documentation/html/index.html new file mode 100644 index 0000000..5c9c4bb --- /dev/null +++ b/Documentation/html/index.html @@ -0,0 +1,217 @@ + + + + + + + MATLAB Interface for Azure Services — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/Documentation/html/objects.inv b/Documentation/html/objects.inv new file mode 100644 index 0000000..bc8a020 Binary files /dev/null and b/Documentation/html/objects.inv differ diff --git a/Documentation/html/search.html b/Documentation/html/search.html new file mode 100644 index 0000000..b225be8 --- /dev/null +++ b/Documentation/html/search.html @@ -0,0 +1,149 @@ + + + + + + Search — MATLAB Interface for Azure Services documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • »
  • +
  • Search
  • +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2020-2024, MathWorks, Inc..

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/Documentation/html/searchindex.js b/Documentation/html/searchindex.js new file mode 100644 index 0000000..51cb88b --- /dev/null +++ b/Documentation/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["ADXAuthentication","ADXGettingStarted","APIReference","Authentication","Blob","Configuration","DataExplorer","DataLakeStorageGen2","Deployment","Dynamics","FAQ","File","Installation","KeyVault","NullData","OpenAPI","Overview","Performance","Queue","README","References","Testing","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["ADXAuthentication.md","ADXGettingStarted.md","APIReference.md","Authentication.md","Blob.md","Configuration.md","DataExplorer.md","DataLakeStorageGen2.md","Deployment.md","Dynamics.md","FAQ.md","File.md","Installation.md","KeyVault.md","NullData.md","OpenAPI.md","Overview.md","Performance.md","Queue.md","README.md","References.md","Testing.md","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[1,2,4,8,10,12,14,15,17],"00":[1,2,16],"00d68ca96aeb":[1,2],"01":1,"04t12":1,"06":[1,16],"0d31":[1,2],"1":[1,2,4,8,10,11,12,13,14,15,16,17],"10":[1,2,13,16],"100":[1,2,17],"1000":[2,17],"10000":[1,17],"11":[1,15],"11d1a6dd8797":2,"12":[1,4],"120m":2,"1234":2,"123456":18,"123523":[1,16],"128030544":[2,17],"13":[1,16],"131":2,"15":2,"163":2,"176":2,"18":[2,14],"195aaa29":4,"1987":16,"1b2m2y8asgtpgamy7phcfg":4,"1d":2,"1e4e":2,"1e6":3,"1st":[1,4],"1x5":[1,2],"2":[1,2,8,10,12,14,15],"20":[2,16],"200":[1,2],"201":2,"202":2,"2021":2,"2022":[1,2,15],"2023":1,"2024":2,"204":2,"21":[4,16],"22":16,"23":16,"237":14,"24":4,"26":16,"29":16,"2ccsharp":10,"3":[1,15,16],"30":[2,4,16],"32":[2,16],"3452388z":1,"35":[1,16],"376aa20da525":1,"38":2,"3rd":[1,12,16],"4":[2,16],"40":1,"412":2,"42":[2,16],"43":2,"4436":1,"45ac":[1,2],"469b":4,"4994":[1,2],"49d9":2,"4b3a":4,"4c42":[1,2],"4da1":2,"4f79":[1,2],"4faa0b41":1,"4m":2,"5":[1,16],"50":14,"55":16,"5f2953f76ddf":[1,2],"5x27":16,"5x4":2,"6":[15,16,21],"60":[2,4],"60233c25":4,"63bb1cea":[1,2],"64":2,"69":2,"6e12":[1,2],"7":2,"71":2,"74":1,"74be27d":2,"8":12,"80af769f4b03":4,"811":3,"82ad":[1,2],"8765":3,"8de6b799":[1,2],"8e50":2,"8ee":3,"90":13,"93a4":4,"99d":3,"abstract":[1,2],"boolean":[2,9],"break":2,"byte":[2,4],"case":[1,2,3,4,5,7,8,13,14,18],"catch":2,"char":[2,4,14],"class":[0,1,2,3,8,11,14,15,16],"default":[0,1,4,5,7,9,10,11,13,14,16,17,21],"do":[1,2,3,4,8,9,17],"enum":2,"export":[2,3],"final":[2,4],"float":2,"function":[0,2,3,4,5,8,9,11,14,16,17],"import":[4,7],"int":[2,9,14],"long":[2,8,9,14],"new":[2,4,16],"null":[2,6,9,17,22],"public":[2,21],"return":[1,2,3,4,8,9,11,13,14,17],"short":[0,5,16],"static":[2,8,10,12],"throw":2,"true":[1,2,4,9,11,17,21],"try":[2,3],"while":[2,3,4,16,17,18],A:[1,2,3,4,9,11,13,14,17,18,21],And:[2,3,4,5,8,21],As:[2,4,11,14,21],At:[1,2],But:[3,5],By:[2,3,4,5,7,10,11,13],For:[0,1,2,3,4,7,8,9,12,13,15,16,18,21],IS:[2,8],IT:8,If:[0,1,2,3,4,5,7,8,9,13,14,17],In:[0,1,2,3,4,7,8,12,13,14,15,17,18,20,21],Is:2,It:[1,2,3,4,7,13,14,15,17,21],NO:2,NOT:[2,8,13],No:[0,1,2],Not:2,On:[2,3,12,21],One:[2,22],Or:[1,2,3,4,12],The:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,16,17,18,21],Then:[2,8],There:[2,4,11,18,21],These:[0,2,3,21],To:[0,1,2,3,8,10,12,13],With:[2,3,4,7],______:[1,16],________:[1,2],_________:[1,2,16],___________:16,____________:2,_____________:[1,16],_______________:1,_________________:2,____________________:16,______________________________________:[1,2],_____________________________________________:[1,2],____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________:2,a113:1,a1a2:[1,2],a273:[1,2],a607e293:[1,2],a61982585adf:[1,2],a874:4,aad:[1,2],aadobjectid:2,abc123:2,abl:[2,3,4,12,13,21],about:[1,2,3,4,8,20],abov:[1,2,3,4,12,14,18,21],absolut:[5,8,12],accept:[0,1,2,3,11,21],access:[1,2,3,8,11,16,17,18,21],access_token:2,accident:2,accomplish:[1,4,17,18],accord:[2,21],account:[2,3,4,7,11,13],accountkei:3,accountnam:[2,3,4,7],accountsaspermiss:4,accountsasresourcetyp:4,accountsasservic:4,accountsassignaturevalu:4,acquir:[2,3],acquireleas:[4,16],across:[2,15],act:2,action:[2,3,21],actionsrequir:2,activ:[2,3,4],actual:[2,3,4,8,13,21],ad:[0,2,3,8,12,16,17],add:[2,4,8,12,15],addit:[0,1,2,3,4,5,7,8,9,10,11,16],addition:17,additionalargu:2,additionalinfo:2,addlast:3,address:[1,2,4,11,18,21],admin:2,administr:21,adopt:14,advanc:1,advantag:[2,17],advic:8,adx:[0,1,9,14,15,16,17,21],adxauthent:[1,3,16],adxdemo:1,adxgetrowswithschema:17,ae:2,affect:3,after:[2,8],afterward:8,ag:2,again:[2,3,4,7,8,13],against:[2,21],agreement:16,aid:[2,16],airlinesmal:[1,2],airlinesmallcsv:[1,2],algorithm:2,aliv:2,all:[1,2,3,4,7,8,11,13,14,16,17,18,21],alldatabasesadmin:2,alldatabasesview:2,allow:[2,3,4,5,7,13,16,21],allowal:[2,14],allowdynam:2,allowedfqdnlist:2,allowediprangelist:2,allownullstr:[2,14],almost:4,alon:2,along:[2,14,16,17],alreadi:[2,3,4,8,21],alreadyexist:2,also:[1,2,3,4,7,8,10,11,13,14,16,17,20,21],alter:[9,14],altern:[0,2,3,4,5,8,13],alwai:[2,8],amort:2,amount:[1,2,17],an:[0,1,2,3,4,5,8,9,10,11,12,13,14,16,17,18,21],anakin:21,analysi:8,ani:[2,3,4,8,9,12,13,14,21],annot:2,anomal:14,anoth:[1,2],anymor:3,anyth:2,anywai:21,anywher:8,apach:12,apacheavro:2,api:[0,1,4,6,7,8,11,15,16,17,18,19,21,22],api_vers:2,apikei:[1,2],apirefer:[3,4,18],apivers:[1,2,15,17],app:[0,2,3,8,17],appear:[1,2,4,13,21],append:[2,4],appid:2,appli:[0,2,3,4,9,14,17],applic:[0,2,3,8],approach:[0,2,3,8,9,11,12,14,15],appropri:[0,2,10,21],approv:2,approxim:2,ar:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,21],arch:[0,4,12,16,18,19],architectur:16,ard:2,arg:[1,2],argument:[0,1,2,4,8,9,14,17,18],arithmet:2,arm:2,arrai:[1,2,3,4,9,11,13,14,16],artifact:2,asglu:[1,2],ask:22,assign:[1,2,3,21],assist:1,associ:[2,3,4],assum:[1,2,4,14,15,16],assumpt:2,assv:2,async:2,asynchron:[2,13],attach:2,attacheddatabaseconfigurationnam:2,attacheddatabasenam:2,attempt:[1,2,3,9],attribut:2,audienc:2,auth:15,authent:[1,6,7,10,11,12,13,18,19,21,22],authenticationrequiredexcept:2,authmethod:[2,3],author:2,authorityhost:3,auto:2,autogener:8,automat:[1,2,3,7,8,9,12,13,16,21],autoscal:2,avail:[1,2,4,12,14,16,17,18,22],avoid:[1,2,17],avro:2,az:[3,21],azur:[0,1,4,5,8,9,11,14,17,18],azure_client_certif:21,azure_client_certificate_path:[2,3],azure_client_id:[2,3,21],azure_client_secret:[2,3,21],azure_password:[2,3],azure_storage_connection_str:3,azure_tenant_id:[2,3,21],azure_usernam:[2,3],azurecli:[2,3],azureclicredenti:3,azurecommonroot:[3,4,11,18],azurekeyvault:13,azurerekusto:1,azuresdkdoc:[2,4],azuresku:1,azurestorageexplor:7,b579:2,b57b:[1,2],b589:[1,2],b:[2,4],backend:10,backoff:2,backslash:2,backwardli:[4,18],bag:9,bandwidth:17,bar:4,barmetadatakei:4,barmetadatav:4,base64:[2,21],base:[0,1,2,3,4,7,9,11,12,13,15,16,17,21],bash:[2,3],basi:[13,21],basic:[1,2,4,8],bearer:2,bearertoken:[0,1,2],becaus:[2,8],becom:[2,4],been:[1,2,3,4,8,12,15,21],befor:[2,3,7,8,12,13],begin:[2,4,11,12],begindeletekei:13,begindeletesecret:13,beginrecoverdeletedkei:13,beginrecoverdeletedsecret:13,behavior:[1,2,9,14],being:[2,3,9,11,13,17],belong:2,below:[1,2,3,4,7,8,9,12,13,16,17,21],benefit:17,best:[2,9,13,17],between:[2,4,18],beyond:[2,4],big:3,binari:17,blob1:21,blob2:21,blob:[0,1,7,11,15,18,21],blob_storag:2,blobclient:[3,7,16,21],blobclientbuild:4,blobcontain:[2,7],blobcontainercli:[4,7,21],blobcontainerclientbuild:4,blobcontaineritem:4,blobcontainerobject:4,blobcontinercli:2,blobitem:4,blobleasecli:[4,16],blobleaseclientbuild:[4,16],blobnam:[4,7,16],blobprefix:[2,4],blobsaspermiss:4,blobsassignaturevalu:2,blobservic:[2,7],blobservicecli:[4,7,21],blobserviceclientbuild:4,blobservicesassignaturevalu:4,block:[2,4,13],block_blob_storag:2,bodi:[1,2],bool:[2,9,14],both:[1,2,3,4,5,7,11,12],bottom:8,breakleas:4,breakpoint:2,bring:[2,14],broadli:1,broken:2,browser:[0,2],bsssv:2,bug:2,build:[1,4,7,13,15,16,18],buildclient:[4,11,13,16,18],buildcontrolplanecli:15,builddirectorycli:11,builder2:11,builder:[2,3,4,11,13,16,18],buildfilesystemcli:2,buildsettingsfil:[0,16],built:[2,3,4,7,12,15],builtin:[2,7,16],bulk:1,byt:2,c1ruq:2,c:[1,2,3,4,7,13],cach:[0,2],cachecontrol:2,call:[0,1,2,3,4,5,7,8,9,11,13,15,17,18],callback:[2,3],caller:2,callerrol:2,can:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,16,17,18,20,21],cancel:[1,2],cannot:[2,3,4,9,21],capabl:[2,4,7,16,18],capac:[1,2],carefulli:13,categori:2,caught:2,caus:[2,10],cd4184ca:[1,2],cd:[3,12,15,21],cell:[1,2,4,9,14,17],central:[4,11,18],certain:[0,2,4,16,21],certainti:9,certif:[2,3,13,21],cf33:2,chain:[2,20],chainedtokencredenti:3,chainedtokencredentialbuild:3,challeng:2,challengeconsum:2,chang:[1,2,8,12,15,16,18],changeleas:4,charact:[2,9,14],cheat:1,check:[2,4,11,13,15,17],checkschema:2,choos:[10,21],ci:[3,21],cidr:2,circumst:4,claim:2,clarifi:0,classdef:2,classpath:[8,10],clean:[12,15],clear:[2,4,13,18],clearmessag:18,cli:[2,15],click:3,client1:[2,7],client2:[2,7,11],client:[2,6,7,20,21],clientbuild:13,clientcert:3,clientid:[0,1,3,16],clientrequestproperti:1,clientrequestpropertiesopt:1,clientsecret:[0,1,3,13,16],clientsecretcredenti:3,clipboard:3,clone:15,close:2,cloud:2,cluster:[0,10,16,17],clusterlistresult:1,clusternam:2,clusterproperties_1:1,clusterresourceid:2,clusterslist:1,clusterurl:2,cmd:3,code:[0,1,2,5,8,12,13,15,16,17],colidx:14,collect:2,collectfromlog:2,colnam:[1,2],colon:13,column:[1,9,14,17],com:[0,1,2,3,4,5,7,8,9,11,12,14,15,16,18,21],combin:[3,4],command:[0,2,3,7,8,10,12,14,16,17],comment:0,commit:4,common:[1,3,7,8,10,12,16,22],common_redirect_uri:21,commun:17,compani:[2,16],compat:[2,4,18],compil:[3,12,19,22],complet:[1,2,3,13],complex:2,compli:2,compon:[12,22],comprehens:17,comput:[2,17],concaten:2,concept:[2,4,11,14,18],conceptu:[4,18],concern:9,concis:1,conclud:2,concurr:2,condit:2,confidenti:2,config:[0,1,2,3,4,5,11,13,16,18],configfil:2,configfilepath:2,configur:[0,2,3,4,10,11,15,18,19,21,22],configurationfil:[2,4,7,13],configurecredenti:[3,4,5,7,11,13,16,18],conflict:2,conform:2,confus:[0,2],conjunct:4,connect:[0,1,2,4,16,18,20],connectionstr:[3,4,18],connecttimeout:2,consequ:[4,18],conserv:2,consid:[2,7,9,13,14,17],consider:[7,14],consist:2,consol:[2,13],constant:2,construct:[2,4],constructor:2,consult:[4,18,20],consum:[2,4,17],consumergroup:2,contact:[0,2,8,11],contain:[0,1,2,3,7,8,11,12,13,14,17,21],container1:[2,7],container2:[2,7],containercli:4,containerempti:21,containernam:[4,7,16],containernotempti:21,content:[1,2,4,8,9,11,12,16,17,21],contentconsum:2,contenttyp:2,context:2,continu:2,continueonerror:2,contrari:13,contributor:21,control:[0,4,9,10,14,15,16,17,21],controlbearertoken:0,conveni:[1,2,4,5,16,17,21],convent:[5,14],convers:[1,2,9],convert2doubl:[2,14],convert2int64:14,convert:[1,2,9,13,14,17],convertdynam:[2,9],convertfrom:2,cooki:[1,2],cookieinfo:2,cookiejar:1,copi:[2,3,8],copyfromfil:4,copyfromurl:4,copyid:2,copyright:2,core:[1,3,4,11],corel:1,correct:[2,3,4,8,17],correspond:[0,2,3,4,11,18,21],cosmo:2,cosmosdb:2,cosmosdbaccountresourceid:2,cosmosdbcontain:2,cosmosdbdatabas:2,could:[2,3,4,5,8,21],count:[2,4,17,18],cover:[1,4,18],crd:[2,17],creat:[0,1,3,5,7,8,11,12,15,17,18],createblobcontain:4,createcli:2,createdat:2,createdbi:2,createdbytyp:2,createdirectori:11,createfil:11,createkei:13,createkeyvaultcli:[3,16],createorupd:2,createqueu:[16,18],createstoragecli:[3,4,11,16],createt:1,creation:[2,4],credenti:[3,4,5,7,11,13,16,18,20,21],criteria:4,crp:1,crpo:1,crsdeptim:16,crypto:2,csl:[1,2,17],csltype:2,csv:[1,2],ctf:3,curel:14,current:[2,4,8,11,13,16],custom:[0,2,3,9,12,13],customdisplai:2,customrowdecod:[2,17],d604:4,d:2,dai:[2,4,11,13],darth:21,data:[0,3,4,5,17,19,20],dataappend:2,databas:[0,1,16],databasenam:[1,2],databasenameoverrid:2,databasenameprefix:2,databaserout:2,databearertoken:0,dataconnectionnam:2,datafilenam:2,dataformat:2,dataingestionuri:2,datalak:[3,11],datalakedirectori:[2,7],datalakedirectorycli:[7,11],datalakefil:[2,7],datalakefilecli:[7,11,16],datalakefilefilesystemcli:2,datalakefilesystem:[2,7],datalakefilesystemcli:[7,11],datalakefilesystemclientbuild:11,datalakepathclientbuild:11,datalakeservicesassignaturevalu:11,datalakestoragegen2:4,datamanagementpublicipid:2,dataplanescop:1,datareplac:2,datasetcomplet:1,datasethead:1,datashar:2,datatyp:[2,14],date:[2,13,15,16,21],datetim:[2,4,9,11,14],dayofweek:16,db:[1,2],dbclear:2,dbcont:2,dbdd:[1,2],dbdown:2,dbmex:2,dbquit:2,dbstack:2,dbstatu:2,dbstep:2,dbstop:2,dbtype:2,dbup:2,dc52:4,dc641b4877a9:4,dd:2,deal:14,debugg:2,decim:[2,14],declar:2,decod:[2,9,14],defaultazur:[2,3],defaultazureprovidercredenti:3,defaultclusternam:[0,16],defaultdatabasenam:[0,16],defaultendpointsprotocol:3,defaultprincipalsmodificationkind:2,defin:[2,4,14],definit:2,delai:2,deleg:[2,3,4],delet:[4,11,18,21],deleteblob:4,deleteblobcontain:4,deletecontain:4,deletedirectori:11,deletedkei:13,deletedsecret:13,deletefilesystem:2,deletemessag:18,deletequeu:18,deletesubdirectori:11,delimit:[4,12],demand:2,demo:[1,2,15],depend:[0,2,3,4,8,10,12,17],deploi:[3,8],deploy:[19,22],deptim:16,dequeu:2,dequeuecount:2,deriv:[2,3,7,12],descend:3,describ:[1,2,3,4,9,10],descript:[0,1,2,18,21],deseri:2,design:[2,7,13,18,20],desir:[2,3,4,9],destclient:4,destin:[2,4,10],destinationblob:4,destinationcontain:4,destinationfilesystem:2,destinationpath:2,destructor:2,detach:2,detail:[1,2,3,4,5,7,9,11,12,13,16,17,18,21],detect:[2,14],determin:[1,2,4],dev_no_sla_standard_d11_v2:2,dev_no_sla_standard_e2a_v4:[1,2],develop:[3,8],devic:[0,2],devicecod:[0,2,3],devicecodecallback:[2,3],devicecodecredenti:3,devicecodeinfo:3,devicelogin:[2,3],df:11,diagnos:2,diagnost:2,dictionari:2,differ:[0,1,2,3,4,7,11,13,14,18,21],digest:2,dir:[2,7,11,16],dirclient:11,direct:[2,17],directli:[0,1,2,3,4,7,13],directori:[2,3,5,8,12,15,16,21],directorynam:[2,7,11],disabl:[2,11],disconnect:2,discover:19,discuss:[0,3,7,8,13,21],disk:[2,3],disp:[1,3],displai:[1,2,3,4],displaylevel:2,distribut:22,dlsssv:[2,11],doc:[1,2,4,7,11,15],docdir:2,docstr:2,document:[0,1,2,3,4,5,7,8,9,11,15,18,19,20,21,22],doe:[0,1,2,3,9,11,13,14],doesn:2,domain:2,domainnam:2,domin:17,don:[1,2],done:[4,17],doubl:[2,9,14,17],down:21,download:[2,12,16],downloadfil:4,downloadtofil:4,downloaduri:[1,2],downloadurl:[1,2],draft:2,drop:[1,2],droptabl:1,dstdir:11,dta:2,dualstack:2,due:2,durabl:18,durat:[1,2,14],dure:[2,3,8],dynam:[2,6,8,12,14,17,22],dynamicprop:2,e308:1,e:[0,2,3,4,5,7,9,13,18,21],each:[1,2,3,4],earli:[1,2],eas:1,easier:2,easiest:8,easili:[1,4,13,14],ec:2,ec_hsm:2,ed75e15db0a8:[1,2],edit:[8,12],editor:[8,12],effect:[2,3,14],effici:17,effort:9,egress:2,either:[2,3,8,12],elaps:13,element:[2,4],elig:2,els:[1,2],email:2,embed:3,empti:[2,3,4,9,21],en:[1,2,4,7,9,10,11,14],enabl:[1,2,3,4,14,17,21],enableautostop:2,enablediskencrypt:2,enabledoubleencrypt:2,enablepurg:2,enablestreamingingest:2,encapsul:2,encod:[2,21],encodedqueri:[1,2],encodeduri:[1,2],encount:[2,14],encrypt:2,end:[1,2,3,8,10,12,13,15],end_dat:2,endpoint:[0,5,7,11,16,18],endpointsuffix:3,endtim:2,engagementfabr:2,engin:2,enginepublicipid:2,enginetyp:2,enhanc:[19,22],ensur:[2,4,8,21],enter:[2,3],entir:[1,2,21],entireti:2,entiti:2,entri:[2,4,12,13,16],enumer:[1,2,14],env:2,environ:2,environmentcredenti:3,epoch:2,epochtim:2,equal:[2,8],equival:[2,11],error:1,errorani:[2,14],errorlogicalint32int64:[2,14],errormessag:2,escap:2,especi:8,essenti:4,etag:[1,2],etc:[2,3,4,13,21],even:[2,7,13,21],event:2,eventgrid:2,eventgridresourceid:2,eventhub:2,eventhubresourceid:2,eventsystemproperti:2,ever:2,everi:2,ex:[2,7],exact:[1,2,8,10],examin:[1,2],exampl:[0,1,2,3,4,5,7,8,10,12,13,14,17,20,22],examplecustomrowdecod:17,except:[2,4,14],exclud:2,execut:[2,3,8],exhaust:3,exhibit:17,exist:[1,3,8,11,13,18,21],existingblobcli:4,existingcontainercli:4,existingdircli:11,exit:2,exp:2,expect:[1,2,3,15],experi:2,expir:[2,4,11,13,18],expiresat:2,expiretim:18,expiri:[2,4,21],expirytim:[4,11],explicitli:[2,3,7,8,13],explor:[1,2,3,4,5,7,9,14,17,19],exponenti:2,exportedt:[1,2],exporttoblob:1,exporturi:[1,2],exporturl:[1,2],expos:[0,4,18],express:2,ext:4,extend:2,extendedproperti:1,extens:[2,4,18],extentid:[1,2],extern:[0,2],externaltablestoexclud:2,externaltablestoinclud:2,extra:2,extract:[2,17],eyj0:2,f6eb8bda:2,f:2,facilit:2,fact:[2,3,5],fail:[1,2,3,9],failov:3,failur:2,fall:3,fals:[1,2,4,10,11,13,17],familiar:[1,15],faq:19,far:17,fast:2,faster:17,fe0b331d3642:2,featur:[2,3,12,16,21],feedback:2,few:2,field:[2,3,4,17],file1:21,file:[3,4,5,7,10,12,13,15,17,18,22],file_storag:2,filealreadyexistsexcept:2,filenam:[2,3,4,5,7,11,13,16],filepart:4,filepath:2,filesystem:2,filesystemnam:[7,11,16],filesystempermiss:2,filesystemsaspermiss:11,filter:[2,4,17],find:[2,15],first:[1,2,3,4,7,8,12,13,16],firstrow:16,fist:2,fix:2,flag:[2,8,17],flatten:[2,4],flow:[2,3,21],fluent:2,folder:[2,4,15],follow:[1,2,3,4,5,7,8,9,10,11,12,13,14,16,17,18,20],foo1:4,foo2:4,foo:4,forc:2,forceupdatetag:2,foreknowledg:[2,17],form:[2,3,13,16,17,21],format:[1,2,5,12,15,16,17,21],formatteddisplaytext:2,forward:[4,18],found:[0,2,4,10,12,18,21],fourth:4,fprintf:[1,2],fqdn:2,fqn:2,fragment:2,frame:[1,2,17],frametyp:1,free:[2,14],frequent:22,from:[2,3,4,5,7,8,9,11,12,13,15,16,17],fromjson:17,front:[2,8],fsclient:11,fssp:11,full:[2,4,5,8,12,18,19],fullfil:[1,2,3,4,11,12,18],fulli:2,functionstoexclud:2,functionstoinclud:2,fundir:2,further:[1,2,4,8,9,10,12,16,21],futur:[1,2,12],g:[0,2,3,4,5,7,13,15,18,21],gen2:[2,3,4,5,18,19,20],gen:15,gener:[0,1,2,3,6,8,11,12,16,17,18,20,21],generateaccountsa:4,generatedinvit:2,generatesa:[4,11],generateuserdelegationsa:4,geo:2,get:[2,6,10,13,15,17,18,22],getaccountnam:[4,11],getblobcli:4,getbloburl:4,getcontainercli:4,getcontainernam:2,getcontentlength:4,getcontentmd5:4,getdeletedon:13,getdequeuecount:18,getdirectorypath:11,getdirectoryurl:11,getexpirationtim:18,getinsertiontim:18,getkei:13,getmessag:3,getmessageid:18,getmessagetext:18,getmetadata:4,getnam:[4,13,16],getpopreceipt:18,getproperti:4,getrecoveryid:13,getretrievecopi:4,getretrievedeletedblob:4,getretrievedeletedblobswithvers:4,getretrieveimmutabilitypolici:4,getretrievelegalhold:4,getretrievemetadata:4,getretrievesnapshot:4,getretrievetag:4,getretrieveuncommittedblob:4,getretrievevers:4,getrowwithschema:14,getscheduledpurged:13,getsecret:[13,16],getservicecli:4,gettag:4,gettimenextvis:18,getusercod:3,getuserdelegationkei:4,getvalu:[13,16],getverificationurl:3,git:[12,15],github:[0,4,12,15,16,18,19,21],gitlab:21,gitlab_ci:21,give:[2,9],given:[1,2,4,14,17,18],global:13,gnome:3,go:[2,3,7,13],goe:2,good:[13,17],govern:4,graduat:2,grant:[2,4,21],greater:[15,16],greatest:7,grid:2,group:[0,2,16],groupid:2,gson:17,guarante:[2,8],guid:[2,9,14],gz:[1,2],gzip:2,h:[2,17],ha:[1,2,3,8,9,11,12,14,21],had:1,halt:2,handl:[0,2,4,9,14,17],hang:13,happen:2,hard:2,hardcod:[5,13,16],hasaddpermiss:11,hascreatepermiss:11,hasdeletepermiss:11,haserror:[1,2],hasexecutepermiss:11,haslistpermiss:11,hasmanageaccesscontrolpermiss:11,hasmanageownershippermiss:11,hasmovepermiss:11,hasreadpermiss:11,haswritepermiss:11,have:[1,2,3,4,5,7,8,9,12,13,14,15,16,17,21],header:[1,2],headerfield:1,health:2,height:2,held:2,hello:2,help:[3,4,7,9,13,16,17,18,19,20,22],helper:[2,12],henc:[2,13,21],here:[1,2,4,13,17,18],hh:2,hi:2,hidden:2,hierarch:11,hierarchi:[2,4,11,18],high:[1,2,3],higher:[0,2,3,4,7,13,16,17,18],highest:[4,18],hint:[2,7,13],histori:2,hit:2,hn:11,hold:[2,4,9],home:[2,15],homepag:5,hook:0,host:[2,3],hotcacheperiod:2,hour:[2,4,21],how:[1,2,3,4,5,7,11,13,14,18,20],howev:[1,2,3,4,8,12,13,14,17],html:[2,4,7,9,16,19],http:[0,1,2,3,4,5,7,9,10,11,12,13,14,15,16,18,19,21],httpbin:2,httpclient:[4,11,13,18],httpcredenti:[1,2],httpoption:[1,2],httppipelin:2,hub:2,hwtabl:[1,2],i6q:3,i:[2,3,9,15],ia:2,id:[0,1,2,3,13,17,18,20,21],ideal:2,ident:[0,1,20],identifi:[2,14],identitynam:2,ietf:2,if_match:2,if_none_match:2,ifexist:2,ignor:[2,4,8],ignorefirstrecord:2,illegalargumentexcept:2,illustr:1,ilovematlab:2,imag:2,imageconsum:2,immedi:[2,3],immut:[2,4],impact:[9,14,17],implement:[0,1,2,9,11,17],implicitli:2,import_export:[7,16],improv:2,in_progress:2,inc:2,includ:[1,2,3,4,8,10,12,13,21],includeprivateparamet:2,increas:[2,21],increasingli:7,inde:[2,8],independ:[17,21],index:[9,22],indic:[0,1,2,10,14],individu:[2,3],inevit:9,inf:2,infinit:2,info:[2,10],inform:[1,2,3,4,5,7,9,13,18,19],ingest:[10,17],ingestclust:1,ingestdata:[1,2],ingestedt:2,ingestfil:1,ingestfilequeu:1,ingestfromqueri:1,ingestinlin:1,ingestor:2,ingestsinglefil:2,ingestt:1,ingesttablequeu:1,inher:17,inherit:2,initi:[0,8,16],inlin:[2,17],inproc:[1,2],input:[2,3,4,5,7,13,15,17],inputt:[1,2],insensit:2,insert:[2,18],inserttim:18,insid:[2,8],instal:[2,7,8,16,17,19,21,22],instanc:[0,2,8],instanti:[2,8],instantli:2,instead:[2,3,15],instruct:[2,3,4],int16:2,int32:[2,14,17],int64:[1,2,4,14,17],int8:2,integ:2,integr:[0,1],intellijcredenti:[2,3],intend:[2,17],intention:2,interact:[0,2,7,8,10,13,16,21],interactivebrows:[0,2,3,4],interactivebrowsercredenti:3,interest:1,interfac:[0,4,8,10,12,13,18,20,21],intermedi:2,intern:[0,1,3,14,17],interoper:13,intmax:2,introduc:8,introduct:[7,11],invalid:2,invari:2,invis:2,invit:2,inviteeemail:2,invok:[2,3],involv:[2,8],io:[2,7,16,19],iot:2,iothub:2,iothubresourceid:2,ip:[2,21],ipv4:2,ipv6:2,ir:2,irrelev:21,isclusterrun:1,isen:2,isfollow:2,ismiss:14,isn:2,isprefix:4,isprogress:1,issu:[10,14,16,17,20],itabl:2,itemload:[1,2],iter:4,its:[1,2,3,4,5,8,12,13,14,16,18],itself:[0,1,2,3,4,8,10,17,18],jar:[2,10,16,22],jarext:8,java:[0,2,3,4,8,11,13,15,16,17,20,22],javaclasspath:[12,22],javakeyvaultsecret:2,javax:2,jdk:16,johnson:2,jose:2,json:[0,1,2,4,5,7,9,11,13,15,16,17,18],jsonconsum:2,jsondecod:[2,9],jsonmapp:17,jsonwebkei:13,just:2,jvm:3,k:[2,4],keep:[2,8],keepalivetim:2,kei:[4,5,11,19,20],kept:[2,5],key1:3,key2:3,keya:2,keyclient:[3,13,16],keyclientbuild:13,keyid:2,keynam:[2,13],keypair:[2,13],keyr:3,keyrsa:[2,13],keytyp:[4,13],keyvault:[13,22],keyvault_client_id:21,keyvault_client_secret:21,keyvault_tenant_id:21,keyvault_vault_nam:21,keyvaultset:[2,13],keyvaulturi:2,keyvers:2,kid:2,kind:[2,7,13],know:17,known:[1,20],kql:[0,2,17],kqlqueri:17,kty:2,kusto:[0,1,2,9,14,15],kustocli:15,kustoschema:2,kvtestkei:21,l:[2,4],lack:2,lake:[2,4,5,19,20],lambdamonosubscrib:2,lang:2,languag:[1,2],larg:[1,2,4,14,17,18],larger:17,last:[2,8,13],lastli:[3,8],lastmodifiedat:2,lastmodifiedbi:2,lastmodifiedbytyp:2,lastnam:2,later:[1,3,16],latest:[2,15,19],lead:2,leader:2,leaderclusterresourceid:2,learn:[1,2,3,4,8,9,10,14,20],leas:2,leasecli:[4,16],leaseclientbuild:4,leaseid:[4,16],leasetest:21,least:[2,21],leav:2,left:2,legal:[2,4],length:2,less:[2,11,16],level1:11,level1dircli:11,level1filecli:11,level2:11,level2dircli:11,level:[0,2,3,4,13,16,17,18],lexicograph:[2,4],li:2,lib:[8,10,12],librari:[8,12,13,17],licens:22,like:[2,3,4,5,8,10,16,21],limit:[1,2,3,8,9,13,17],line:[2,8,14],link:[2,16],linux:[3,8,12],list:[0,2,3,8,9,12,18,21],listblob:4,listblobcontain:4,listblobsbyhierarchi:4,listdeletedkei:13,listdeletedsecret:13,listpath:11,listpropertiesofkei:[13,16],listpropertiesofsecret:13,listqueu:18,listtabl:1,liter:2,live:[0,2],lnew:4,load:[7,8,13],loadconfigurationset:[5,7,13,16],local:[2,7,8,12,21],localfil:[1,2],localhost:[2,3,21],localpath:[1,2],localpathtostorageexplor:7,locat:[1,2,3,4,8],locationinfo:2,log10:2,log1p:2,log2:2,log4j12:8,log4j2:[8,10],log4j:[8,10,12],log:[13,15,21],logarithm:2,logfil:2,logfilelevel:2,loggerprefix:2,logic:[1,2,4,9,11,14,16],login:[2,3,21],logm:2,logobj:2,longer:[13,15],look:[1,2,5],loss:14,low:[4,11,18],lower:[0,4,16,17,18],lowest:[3,4,18],lrd:3,m:[0,1,2,9,12,14,16,17],machin:[3,8],maco:3,made:[2,12,17],mai:[1,2,3,4,5,7,8,9,10,12,13,14,17,18,21],main:[0,8,15,16],major:2,make:[2,4,12,21,22],makevalidnam:2,manag:[0,4,15,21],managedident:[0,2,3],managedidentityclientid:3,managedidentitycredenti:3,managedidentityobjectid:2,managedidentityresourceid:2,managedprivateendpointnam:2,managementcli:2,managementrequest:1,managementrun:1,mani:[2,3,10,14,16,17],manipul:13,manual:[2,8,13],map:[2,4,9,14],mapper:2,mappingrulenam:2,mask:21,mat:[2,4],matalb:2,match:[2,4],materi:2,materializedviewstoexclud:2,materializedviewstoinclud:2,mathwork:[0,1,4,5,7,8,9,11,12,14,16,17,18,19],matlab:[0,1,3,4,5,7,9,10,13,14,17,18,20,21],matlabpath:2,matlabroot:[1,2,8],matlabschema:2,matlabt:2,matrix:20,maven:[12,15,16],max:2,maximum:[2,4],maxmessag:2,maxresultsperpag:4,maxretrydelayinm:2,maxtri:2,mbadx:1,mcc:8,mcrroot:8,md5:[2,4],md:[0,1,2,3,4,7,9,13,14,15,16,18],mean:[0,2,3,4,9,13],meant:2,measur:2,mechan:[2,10],meet:21,member:2,memori:[13,14],messag:[1,2,14,18],messagebodi:1,messageid:2,messagetext:2,metadata:[1,2,9,14],method:[0,1,2,3,4,11,13,16,17,18,20],mex:2,mexcept:2,microsoft:[1,2,3,4,7,9,10,11,14,15,16,20],microsoft_kusto_clust:2,microsoft_kusto_clusters_attacheddatabaseconfigur:2,microsoft_kusto_clusters_databas:2,microsoft_kusto_clusters_databases_dataconnect:2,microsoft_kusto_clusters_databases_principalassign:2,microsoft_kusto_clusters_databases_script:2,microsoft_kusto_clusters_managedprivateendpoint:2,microsoft_kusto_clusters_principalassign:2,microsoft_storage_blobcr:2,microsoft_storage_blobrenam:2,might:9,migrat:2,migrationclust:2,millisecond:2,mimic:2,mind:8,minim:11,minimum:[2,17],minut:2,miss:[2,9,14],mixin:2,mlmstokencach:2,mm:2,mode:[1,2,17],model:[1,4,11,13,17,21],modelsdataplan:1,modif:[2,8],modifi:[2,22],modul:8,monitor:2,mono:2,monomap:2,more:[1,2,3,4,5,7,8,9,11,12,13,16,17,18,20,21],most:[2,3,4,5,17],move:2,msal:[2,3],msalcach:3,msg:18,msgresult:18,mtabl:2,multi:2,multijson:2,multilin:2,multipartconsum:2,multipl:[1,2,3,7,8,13],must:[2,3,4,5,7,8,12,13,14,17,21],mvn:[12,15],mwlab:[0,8],my:[2,4,7,11,16,18],myaccount:[1,11],myadxclust:1,myauthor:3,myblob:[2,4,7,16],myblobnam:4,myclass:2,myclust:2,myclusternam:1,mycol:[1,2],mycolumn:[2,16],myconfig:2,myconnectionstr:3,mycontain:[2,4,7,16],mycontainernam:4,mycontainternam:4,mycredenti:[2,7,13],mycredentialconfigur:3,mydatabas:1,mydatabasenam:[1,2],mydeletedsecretnam:2,mydeployedmodul:2,mydir:[2,4],mydirectori:2,mydirectorynam:11,myenum:2,myexamplecallbackfunct:3,myexcept:2,myfil:[2,4,8,12,13],myfilepath:11,myfilesystem:[2,7,11,16],myfilesystemnam:11,myfunc:2,myfunctionhandl:2,myhost:2,myinteractivebrowserset:4,mykeynam:[2,13],mykeyvaultnam:2,mymatlabcach:3,mynewsecret:13,myotherdirectori:11,myoutput:1,myparquet:2,myprop:4,myquenam:18,myquerystr:14,myqueu:[2,7],myqueuenam:[16,18],myregion:1,mysecretnam:[2,13,16],mysecretvalu:13,myset:5,mystorageaccount:[2,4,7],mystoragesharedkei:11,mystringvalu:[2,17],mysubdir:2,mytabl:1,mytablenam:[1,2,16,17],mytestrsakei:13,myurl:5,myvaultnam:13,n1:14,n2:14,n3:14,n4:14,n5:14,n:[1,2,14],name:[0,1,2,3,4,5,11,15,16,17,21],nameavail:2,namespac:[1,2,11],nan:[2,14],nat:[2,14],nativ:1,natur:[2,9,17],navig:19,nb:2,nbf:2,necessari:[0,2,4,8,13],need:[2,3,4,5,7,8,10,11,12,13,14,15,17,21],neg:2,neither:[2,7],nest:2,net:[0,1,2,3,4,8,11,13,16],netfx:2,netti:[2,4],network:[2,21],never:4,newblobcli:4,newdir:2,newer:10,newli:[2,4],newlin:2,next:[2,18,22],nextlink:2,nocont:2,non:[2,3,4,7,9,11,13,21],none:[2,3,7],nonprogress:[2,17],nor:[2,7],normal:[2,13],not_start:2,note:[0,1,2,3,4,9,12,13,14,16,21],noth:2,notic:[1,2],notif:8,notifi:[2,3],notrunc:2,now:[1,2,3,4,8,11,12,13,15],npm:15,nulldata:[9,17],nullpolici:[9,14],nullval:11,num2str:2,number:[1,2,3,4,9,10,12,13,14,17],numrow:2,o:[2,15],oai3:15,oauth2:[2,3],oauth2client:2,oauth:2,obfusc:2,obj:2,object:[1,3,4,5,7,9,13,15,17,18,21],obtain:[0,2,3,4,13,21],occur:2,oct:[2,16],oct_hsm:2,odata:2,off:2,offer:[5,16],offline_access:2,offsetdatetim:2,often:[3,4,18],ok:[1,2],older:[4,18],omit:2,onc:[1,2,3,13,16,21],one:[1,2,3,4,8,18,21],oneapierror:1,ongo:2,onli:[2,3,4,5,7,8,17,21],onto:8,open:[2,3,8,12],openapi:[2,6,16,22],openapitool:15,oper:[1,3,7,12,16,21],operationid:[1,2],operationkind:2,operationst:2,optim:[1,2,17],option:[0,1,2,3,4,5,9,11,12,14,17,22],orc:2,order:[2,3,4,21],orderedcolumn:2,org:2,origin:2,originaldatabasenam:2,other:[0,1,2,3,4,5,7,9,11,13,14,17,18],otherwis:[2,9],out:[2,13],outag:[1,2],outagest:2,outbound:2,outgo:2,output:[1,2,10,12,15],outputdataformat:2,outsid:4,over:[1,2],overhead:2,overlap:[4,7,18],overrid:2,overridden:[2,4],overview:[11,19],overwrit:[2,4],overwritten:[2,8],own:[2,3],ownership:2,p72:3,p:2,packag:[0,1,2,3,4,5,8,10,12,14,15,16,17,18,21],packet:2,pad:2,page:[2,5],pagediter:4,pair:[2,3,4,11,17],parallel:[1,2],parallelthreshold:[1,2,17],paramet:2,parent:2,parfor:17,parpool:[2,17],parquet:[2,17],parquetfil:1,parquetinfo:2,parquetread:[1,2],pars:13,parser:2,part:[2,13,17],parti:[12,16],partial:2,particular:[2,8],particularli:[3,16],partli:8,pass:[2,3,4,7,9,14,17,21],password:2,path1:2,path2:2,path:[0,1,2,3,5,7,8,11,13,15,16],pathitem:11,pathnam:11,pathsaspermiss:11,pattern:[2,4,7],payload:2,peek:2,pem:[2,3,21],pemcertif:3,pend:2,per:[2,4,13,14,21],percentag:2,percentcomplet:2,perform:[1,2,3,4,6,9,11,14,16,21,22],period:[2,21],perman:[2,13],permiss:[2,3,4,21],permit:[2,17],permstr:2,persist:3,pertain:2,pick:4,place:[2,4,8],plain:2,plane:[0,15,16],platform:[1,2,8,17],pleas:[0,2,16],poc:2,point:[0,2,7,21],polic:21,polici:[4,9,14,21],poller:2,pom:[12,16],pool:[2,17],popreceipt:2,popul:2,port:[2,3,21],portal:[2,3,10],portion:17,posit:[2,12],posix:2,possibl:[2,3,4,7,8,12,13,14,17,21],post:2,postfix:2,potenti:[2,9,14],powershel:2,practic:[3,4,13],praquett:[1,2],pre:[2,3,7],precis:[2,14,17],predict:8,prefdir:[8,12],prefer:[2,3,4,8,9,12,13,14,15,16],preferredauthmethod:[0,1,2,16],prefix:2,prepend:2,presenc:14,presend:15,present:[2,9,14],prevent:[2,13],previou:[2,4,18],previoulsi:11,previous:[1,2,3,4,11,18],primari:[2,3,16],primarili:4,primaryresult:[1,2,17],primit:[2,9],princip:[2,4,21],principalassign:2,principalassignmentnam:2,principalid:2,principalnam:2,principalsmodificationkind:2,principaltyp:2,print:[1,2,3,16],prior:[2,17],prioriti:2,privat:[2,4],privateendpoint:2,privateendpointconnectionnam:2,privatelink:4,privatelinkresourceid:2,privatelinkresourcenam:2,privatelinkresourceregion:2,privatelinkserviceconnectionst:2,probabl:[2,10],problem:[2,8],proceed:[2,10],process:[0,1,2,3,8,9,12,13,15],procur:20,produc:[2,12],product:[2,8,16],profil:17,profilenam:2,program:[2,7],progress:[2,17],project:2,prompt:[2,3],proof:2,proper:2,properli:[2,21],properti:[2,3,8,9,10,13,15,16,17],propertiesprop:1,propertynam:[1,2],propertyvalu:[1,2],proplist:[2,13,16],protect:[13,21],prototyp:2,provid:[1,2,3,4,5,7,9,12,13,14,16,17,18,21],provis:2,proxi:[2,4,21],proxim:17,proxyopt:2,psp:11,psv:2,publiciptyp:2,publicnetworkaccess:2,publish:[2,4,18],purgedeletedkei:13,purgedeletedsecret:13,purpos:[2,9,14],put:[1,2,4],python3_10_8:2,python3_6_5:2,python:[2,8],q:[1,2],qc:18,qlist:18,qsc:18,qsssv:2,qualifi:2,quantiti:2,queri:[0,4,9,10,13,14,17],query_datetimescope_column:2,query_languag:[1,2],querycompletioninform:[1,2],queryorcommand:2,queryparametersstat:2,queryperflog:2,queryplan:2,queryproperti:2,queryrequest:[1,17],queryrun:[1,17],querytracelog:2,queryv2response2t:1,queryv2responseraw:[1,17],question:22,queue:[1,7,11,21,22],queueclient:[7,16,18,21],queueclientbuild:18,queuemessagelist:2,queuenam:[7,18],queuesassignaturevalu:2,queueservic:[2,7,16,18],queueservicecli:[7,16,18,21],queueserviceclientbuild:18,queuestorag:18,quick:13,quit:[2,4,8,18],quot:[2,17],r2019a:16,r2021a:16,r2021b:10,r:2,rais:4,randomuuid:2,rang:2,rare:13,rather:[1,2,3,4,7,8,9,17,18],raw:[2,17],reach:2,reactor:2,read:[1,2,3,4,5,7,11,13,16],readabl:19,readi:12,readm:[11,15],readonlyfollow:2,readwrit:2,real:[2,9,14],realli:21,reallog:2,reappli:8,reason:[1,2,4,9],receipt:18,receiv:[2,18],receivemessag:18,recommend:[0,1,2,3,4,7,9,12,13,16,18],reconfigur:2,record:[2,16],recov:2,recover:2,recoveri:[2,13],recoveryid:[2,13],recoveryuri:13,recurs:2,redact:[0,1,2,3,16],redirect:[2,3,21],redirecturl:3,ref:[0,4,7,9,12,16,18,19],refer:[3,6,7,8,10,16,19,22],referenc:[4,18],refresh:2,regardless:8,region:[0,2,16],regist:21,registr:0,reinstal:8,reject:2,rel:[2,21],relat:[1,2,3,4,16,21],releas:[1,2,8,10,12,15],releaseleas:4,relev:[2,3,11],reli:[3,5,10],reload:2,remain:[2,14],remot:[2,7,16,17],remov:[1,2,14,15],renam:11,renameddircli:11,renew:2,renewleas:4,repeat:[2,17],replac:[2,15],repli:[2,3],repositori:16,repres:2,represent:2,req:1,request:[2,3,4,17,22],requestid:[1,2],requestmessag:2,requestproperti:[1,2],requestretryfactori:2,requir:[0,1,2,3,4,7,8,10,11,12,13,15,17,18,21,22],requiredmemb:2,requiredzonenam:2,reserv:[1,2,4],resid:2,resolv:14,resourc:[0,3,4,10,15,21],resourcegroup:[0,1,2,16],resourcegroupnam:[0,2,16],resourceid:3,resourcenam:2,resourceprovidernamespac:2,resourcetyp:[2,4],resourcetypesstr:2,respect:[2,4,17],respond:2,respons:[1,2,4,14,17],response2:2,responsemessag:1,rest:[2,4,15,16],restart:12,restrict:2,restrictoutboundnetworkaccess:2,result:[1,2,3,4,9,14,16,17],results_progressive_en:1,resultt:[1,2],resum:2,retain:2,retent:2,retri:2,retriev:2,retrievalstartd:2,retrydelayinm:2,reus:13,reusabl:4,review:10,rid:15,right:[2,8,13],robust:[2,17],role:[2,21],root:[2,4,10],rootlogg:10,rotat:2,rout:2,row:14,rowcount:16,rowidx:14,rp:2,rsa:[2,13,21],rsa_hsm:2,rsakei:13,rsakeytyp:2,rule:2,run:[3,8,12,14,15,16,17,21],runtim:[4,12,22],runtimeexcept:2,s:[0,1,2,3,4,7,8,9,11,12,13,15,16,17,18,21],sa:[1,3,7],safe:21,safeti:4,sai:8,same:[2,3,5,7,8,9,13,20,21],sampl:[1,2,17],sanchez:2,saniti:2,sass:4,sastoken:[4,7,11],sasvalu:4,save:[2,3],sc:2,scalar:[2,9,14],scale:[2,17],scaletyp:2,scenario:[2,3],schedul:[2,13],schema:[2,9,17],scope:[1,2],script:13,scriptcont:2,scripturl:2,scripturlsastoken:2,scsv:2,sdk:[0,2,3,4,13,16,18,19,20,22],search:[2,5,7,13],second:[2,3,4,8,11,13,16],secondari:3,secondaryhost:2,secret:[20,21],secretcli:[13,16],secretclientbuild:13,secretkei:2,secretnam:[2,13],secretvalu:[2,13,16],section:[3,21],secur:[13,21],see:[1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,21],seen:2,select:[1,3],semi:13,semicolon:2,send:[2,18],sendmessag:18,sens:[2,3,13],sensit:[0,2,21],sent:2,separ:[1,3,7,16,21],sequenc:9,seri:3,serial:2,serv:2,server:[2,8,17],servertimeout:2,serveruri:[1,2],servic:[0,3,7,8,10,11,12,13,21],servicecli:4,serviceclientbuild:3,servicemetadatauri:2,servicesa:2,servicesstr:2,session:2,set:[1,2,3,4,7,11,13,14,16,17,18,21],setblobaccess:4,setcontain:4,setcreatepermiss:11,setcustomhead:2,setdetail:4,setenv:3,setfileaccess:4,setlistpermiss:[4,11],setmaxresultsperpag:4,setprefix:4,setreadpermiss:[4,11],setretrievemetadata:4,setretrievetag:4,setsecret:13,settings_clientsecret:3,settings_connectionstr:[4,18],settings_devicecod:3,settings_storagesharedkei:4,setup:2,setx:3,shard:2,share:[1,2,11,16,21],sharedaccesspolicynam:2,sharedkei:2,sharedtokencach:[2,3],sharedtokencachecredenti:[3,12],sheet:1,shell:2,ship:[4,18],should:[0,1,2,3,4,7,8,9,12,13,15,16,17,21],show:[0,1,2,3,4,9,14],shown:[2,11,12],side:[14,17],sign:[2,3,4],signatur:[1,2,3,21],signedexpiri:2,signedstart:2,signific:[4,18],significantli:[2,21],similar:[2,4,11,13,16,18],similarli:[2,13,21],simpl:[2,9,13,14,17],simpler:2,simplest:[0,16],simpli:[2,3,4,8,9],simplifi:[2,4,13,18],simtimeseri:2,simul:2,simulink:2,simultan:[2,3],sinc:[2,21],singl:[2,3,5,8,18,21],singlejson:2,singleton:2,site:3,situat:[3,8,12],size:[2,4,17,21],skip:[2,21],skipjsondecod:2,skipresponsedecod:2,skiprowsarraydecod:2,skiptoken:2,sku:[1,2],skudescript:15,sl4j:10,slf4j:[8,10],slot:9,slow:17,slower:2,small:[1,17],snapshot:[2,4],so:[2,3,4,9,10,13,17],soft:[2,4,21],softdeleteperiod:2,softwar:[0,1,2,5,8,9,10,12,13,14,15,16,17,21],sohsv:2,solut:14,some:[0,1,2,3,4,8,9,11,12,14,17,18,21],some_field:2,someth:[4,5,8],sometim:[0,4],somewhat:1,sourc:[1,2,4],sourceblob:4,sourcecontain:4,spec:[2,16,22],special:[4,9,16],specif:[2,3,4,7,8,9,12,13,15,16,18,19,20,21],specifi:[2,3,4,7,8,13],speed:[1,2,17],split:[2,7,21],sprintf:[1,2,13,16,17],sql:[1,2],srcclient:4,srcdir:11,srcdirclient:11,srcsa:4,srcstr:4,srcurl:4,ss:2,stabl:[2,11,15],stand:[2,8],standalon:[12,22],standard:2,standard_d11_v2:2,standard_d12_v2:2,standard_d13_v2:2,standard_d14_v2:2,standard_d16d_v5:2,standard_d32d_v4:2,standard_d32d_v5:2,standard_ds13_v21tb_p:2,standard_ds13_v22tb_p:2,standard_ds14_v23tb_p:2,standard_ds14_v24tb_p:2,standard_e16a_v4:2,standard_e16ads_v5:2,standard_e16as_v43tb_p:2,standard_e16as_v44tb_p:2,standard_e16as_v53tb_p:2,standard_e16as_v54tb_p:2,standard_e16d_v4:2,standard_e16d_v5:2,standard_e16s_v43tb_p:2,standard_e16s_v44tb_p:2,standard_e16s_v53tb_p:2,standard_e16s_v54tb_p:2,standard_e2a_v4:2,standard_e2ads_v5:2,standard_e2d_v4:2,standard_e2d_v5:2,standard_e4a_v4:2,standard_e4ads_v5:2,standard_e4d_v4:2,standard_e4d_v5:2,standard_e64i_v3:2,standard_e80ids_v4:2,standard_e8a_v4:2,standard_e8ads_v5:2,standard_e8as_v41tb_p:2,standard_e8as_v42tb_p:2,standard_e8as_v51tb_p:2,standard_e8as_v52tb_p:2,standard_e8d_v4:2,standard_e8d_v5:2,standard_e8s_v41tb_p:2,standard_e8s_v42tb_p:2,standard_e8s_v51tb_p:2,standard_e8s_v52tb_p:2,standard_ec16ads_v5:2,standard_ec16as_v53tb_p:2,standard_ec16as_v54tb_p:2,standard_ec8ads_v5:2,standard_ec8as_v51tb_p:2,standard_ec8as_v52tb_p:2,standard_l16:2,standard_l16as_v3:2,standard_l16s_v2:2,standard_l16s_v3:2,standard_l32as_v3:2,standard_l32s_v3:2,standard_l4:2,standard_l8:2,standard_l8as_v3:2,standard_l8s_v2:2,standard_l8s_v3:2,start:[2,3,4,6,12,13,22],start_dat:2,starttim:2,startup:[10,12,15,16],state:[2,13],statereason:2,statist:2,statuscod:[1,2],statuslin:1,stdout:10,step:[4,8,9,13,17,18],still:[1,2,3,14,21],stop:2,storag:[5,19],storage_account_kei:21,storage_account_nam:21,storage_connection_str:21,storage_v2:2,storageaccount:2,storageaccountresourceid:2,storageconnectionstr:2,storageexplor:7,storageservic:4,storageset:[2,7],storagesharedkei:[2,3],storagesharedkeycredenti:[3,4],store:[2,3,5,13,14,21],straightforward:1,stream:[2,10],strict:[2,17],string:[1,2,4,9,14,17,18],stringconsum:2,strongli:[4,18],struct:2,structur:[1,2,4,17],style:2,sub:2,subdirectori:11,subdirectorynam:2,subject:[1,2,14],submit:2,subnet:2,subnetid:2,subprefix:2,subscript:[0,1,2],subscriptionid:[0,1,2,15,16],subsequ:2,subset:[4,18],succe:[2,3],succeed:2,success:[1,2,3,14,16,17],successfulli:[2,12,21],successfully_complet:2,suffici:[3,17],suggest:[16,21],suitabl:1,summari:2,superclass:2,supersed:[4,18],supplement:2,suppli:[2,7,11,13],support:[0,2,3,7,8,11,13,14,17,18,20,22],sure:[2,21],suspend:2,suspens:2,suspensionstartd:2,symbol:2,synchron:2,syncpol:13,syntax:[1,2],system:[0,2,3,11,12,17,21],systemassign:2,systemassigned_userassign:2,systemdata:1,t:[1,2,3],tab:10,tabl:[9,14,17],tabledetail:2,tableexist:1,tableexistscheck:2,tableid:1,tablekind:1,tablelist:1,tablenam:[1,2,16,17],tableofcont:2,tableproperti:2,tableschema:2,tablestoexclud:2,tablestoinclud:2,tabular:[1,2],tag:[2,4,12],take:[1,2,9,16,17],taken:[2,9],target:[2,4,8,11,15,18],task:[1,2,16],tcp:2,tee:15,teh:4,templat:[0,2],tempnam:4,temporari:[2,4],tenant:[0,2,20,21],tenantid:[0,1,3,16],tenantnam:2,tenmindur:2,term:[0,2],test:[0,1,2,9,14,18,22],testdatatyp:[9,14],testdb1:2,testdynam:9,testnul:14,testtabl:2,text:[2,8,18],tf:[1,2,4,11,16],than:[1,2,3,4,7,8,11,16,17,18],thei:[0,1,2,3,4,5,8,10,13,15,16,21],them:[1,2,12,17],themselv:[2,9],therefor:[2,3],thi:[0,1,2,3,4,5,7,8,9,10,11,13,14,15,16,17,18,19,21],third:16,those:2,though:[4,8,13],thought:11,thread:[4,17],three:[1,21,22],threshold:[1,2,17],through:[2,3,7,13,21],thrown:2,thu:[3,9,14,20],tickspersecond:2,tier:[1,2],time:[2,3,4,8,13,16,17,18,21],timedatestamp:2,timenextvis:2,timeout:[2,4,13],timespan:[2,9,14],timestamp:2,timezon:[2,4,11,14],tip:14,tmpfile:11,todo:2,togeth:[1,2,12],token:[1,2,7,20],tokencachepersistenceopt:12,tool:[2,3],toolbox:[1,2,8,12,17],top:[1,2],topic:0,torsa:13,tostr:17,total:2,track:2,trademark:[2,16],transact:[1,2],transfer:17,translat:14,treat:2,tree:[15,16],tri:[2,3],trigger:2,trivial:[13,17],trust:2,trytimeoutinsecond:2,tsql:2,tsqlqueri:1,tsv:2,tsve:2,two:[1,2,21,22],txt:[2,4,11,12,16,21,22],type:[1,2,4,7,9,10,12,13,14,15,16,17,18,21],typic:[1,2,3,4,5,8,12,17,21],u:2,uint16:2,uint32:2,uint64:2,uint8:2,unavail:2,unbound:2,under:[1,2,4,8,16,21],underli:[2,4,9,18],undocu:2,unexpect:[2,13],unfortun:8,unintention:13,union:2,uniqu:[2,9,13],unit:[1,9,14,22],unix:2,unknown:2,unless:[4,13],unlik:17,unord:9,unpars:2,unpopul:2,unrestrictedview:2,unset:[1,2],unsuit:4,unsupport:1,until:[2,3,13],up:[2,10,17],updat:[4,8,10,11],upload:2,uploadfil:4,uploadfromfil:4,upon:[2,8,16],uri:[1,2,3,13,21],url:[1,2,3,5,16],urlpath:2,urlstr:4,us:[0,2,3,5,7,8,9,10,11,12,13,14,17,18,21],usabl:3,usag:22,useparallel:[1,2,17],user:[2,3,4,8,12,15,21],user_cancel:2,user_imperson:21,userassign:2,userassignedident:2,userdelegationkei:4,userident:2,userkei:4,usernam:[2,15],usgovcloudapi:4,usual:3,utc:[2,4,11,14],util:12,v12:[4,18],v18:16,v1:[2,17],v2:[2,17],v2respons:2,v3:[2,15],v8:[4,16,18],v:2,val1:2,val2:2,val:2,valid:[2,3,4,7,13,14,21],valu:[0,1,2,3,4,9,11,14,17,21],valuetyp:4,varargin:2,vari:[2,4,9,13],variabl:[1,2,4],varieti:3,variou:[0,2,3,4,5,7,11,16,18,21],vault:[2,3,5,19],vaultnam:[2,13],vaulturl:13,vector:[2,9,14],ver:17,verbatim:2,verbos:1,veri:[3,4,11,16,21],verif:2,verifi:[2,11,12],versa:2,version:[1,2,4,8,10,12,15,19],versionid:2,via:[2,4,7,16,17],vice:2,view:[2,11],viewer:2,violat:2,virtu:3,virtual:[2,16],virtualclustergraduationproperti:2,virtualmachin:2,visibilitytimeout:2,visibl:[2,18],visibletim:18,visual:17,visualstudiocodecredenti:[2,3],volum:[1,2,17],w3clogfil:2,w:2,wa:[1,2,4,12,13,14],wai:[2,3,4,5,13,16,17,18,21],wait:2,waitforcomplet:13,want:2,warn:[1,14],we:[1,4],web:[2,3,4],webopt:2,webread:5,websav:[1,2],webwrit:2,weight:2,well:[0,2,3,5,7,9,12,16,21],were:[2,3],westeurop:[1,2],what:[2,3,4,8,17],when:[1,2,3,4,5,7,8,9,10,12,13,14,17,18,21],whenev:2,where:[2,3,7,8,11,14,15,16,17,21],wherea:2,whether:[2,4,7,17],which:[0,1,2,3,5,7,8,10,12,13,16,17,21],who:2,whole:2,whom:2,whose:[2,4],why:2,window:[0,1,2,3,4,8,11,12,16],wish:0,within:[1,2,4,13,16],without:[1,2,3,5,7,13,16],won:2,word:4,work:[0,1,2,3,4,5,7,8,12,13,16,17,18,21],worker:8,workflow:[2,3,4,8,15,20],workload:18,workspac:2,world:2,would:[1,2,14,17],wrapper:[1,2,13],write:[1,17],written:[2,13],www:[5,7,9,16],x86:7,x:[2,10],xml:[8,10,16],xproperti:[1,2],ye:0,yet:2,you:[0,2,3,4,8,12,16,21],your:[2,7,8,10,16],yyyi:2,zero:[2,9],zonal:2,zone:[1,2],zonedetail:2},titles:["Authentication","Getting Started","MATLAB Interface for Azure Services - API Reference","Authentication","Blob Storage","Configuration","Azure Data Explorer","Azure Data Lake Storage Gen2","MATLAB Compiler (SDK) Deployment","Dynamic Data","Frequently Asked Questions","File Data Lake Storage","Installation","Azure Key Vault","Null data","Azure Data Explorer OpenAPI Spec","MATLAB Interface for Azure Services","Performance","Queue Storage","MATLAB Interface for Azure Services","References","Unit Tests","MATLAB Interface for Azure Services"],titleterms:{"break":4,"class":12,"default":[2,3],"export":1,"function":[1,7,13,18],"null":14,"return":16,A:16,One:8,acceptedaudi:2,access:[4,7,13],accesstoken:2,account:21,accountsaspermiss:2,accountsasresourcetyp:2,accountsasservic:2,accountsassignaturevalu:2,acquir:[4,16],acquireclientcredentialtoken:2,acquiredevicecodetoken:2,acquireinteractivebrowsertoken:2,acquireleas:2,acquiremanagedidentitytoken:2,acquiretoken:2,addarg:2,addit:13,addlast:2,addscop:2,addtokentocach:2,advanc:4,adx:2,adxcurlwrit:2,adxroot:2,api:2,app:21,applycooki:2,arrai:17,ask:10,attacheddatabaseconfidefaultprincipalsmodificationkindenum_0000:2,attacheddatabaseconfidefaultprincipalsmodificationkindenum_0001:2,attacheddatabaseconfigur:2,attacheddatabaseconfigurationlistresult:2,attacheddatabaseconfigurationproperti:2,attacheddatabaseconfigurationproperties_1:2,attacheddatabaseconfigurationschecknameavail:2,attacheddatabaseconfigurationschecknamerequest:2,attacheddatabaseconfigurationschecknamerequesttypeenum:2,attacheddatabaseconfigurationscreateorupd:2,attacheddatabaseconfigurationsdelet:2,attacheddatabaseconfigurationsget:2,attacheddatabaseconfigurationslistbyclust:2,authent:[0,2,3,4,5,16,20],authenticationrecord:2,authorityhost:2,autorest:15,avail:8,azur:[2,3,6,7,10,12,13,15,16,19,20,21,22],azurecapac:2,azurecapacityscaletypeenum:2,azureclicredenti:2,azureclicredentialbuild:2,azurecommonroot:2,azureresourcesku:2,azureresourcesku_1:2,azuresascredenti:2,azuresassignatur:2,azureshel:2,azuresku:2,azureskunameenum:2,azureskutierenum:2,azurestorageexplor:2,badrequest_streamingingestionpolicynoten:10,basecli:[0,2],bearer:0,begindeletekei:2,begindeletesecret:2,beginrecoverdeletedkei:2,beginrecoverdeletedsecret:2,blob:[2,4,16],blobclient:[2,4],blobclientbuild:2,blobcontainercli:2,blobcontainerclientbuild:2,blobcontaineritem:2,blobcontainersaspermiss:2,blobitem:2,blobitemproperti:2,blobleasecli:2,blobleaseclientbuild:2,bloblistdetail:[2,4],blobnam:2,blobproperti:2,blobsaspermiss:2,blobservicecli:2,blobserviceclientbuild:2,blobservicesassignaturevalu:2,blobstorageeventtyp:2,breakleas:2,browser:3,build:[2,3,11,12],buildandauthent:2,buildclient:2,builddirectorycli:2,buildfilecli:2,buildsettingsfil:2,cach:3,canceloper:2,chain:3,chainedtokencredenti:2,chainedtokencredentialbuild:2,chang:[4,10],changeleas:2,charorstring2guid:2,charorstring2str:2,check:16,checknamerequest:2,checknamerequesttypeenum:2,checknameresult:2,checknameresultreasonenum:2,claimsjm:2,clearlogfil:2,clearmemori:2,clearmessag:2,cli:[3,21],client:[0,3,4,11,13,15,16,18],clientcertificatecredenti:2,clientcertificatecredentialbuild:2,clientcopytoblobcontain:2,clientid:2,clientrequestproperti:2,clientrequestpropertiesopt:2,clientsecret:2,clientsecretcredenti:2,clientsecretcredentialbuild:2,clientuploadtoblobcontain:2,clone:12,closelogfil:2,cluster:[1,2],clusterchecknamerequest:2,clusterchecknamerequesttypeenum:2,clusterlistresult:2,clustermigraterequest:2,clusterprincipalassign:2,clusterprincipalassignmentchecknamerequest:2,clusterprincipalassignmentchecknamerequesttypeenum:2,clusterprincipalassignmentlistresult:2,clusterprincipalassignmentschecknameavail:2,clusterprincipalassignmentscreateorupd:2,clusterprincipalassignmentsdelet:2,clusterprincipalassignmentsget:2,clusterprincipalassignmentslist:2,clusterprincipalproperti:2,clusterprincipalproperties_1:2,clusterprincipalproperties_1principaltypeenum:2,clusterprincipalproperties_1roleenum:2,clusterprincipalpropertiesprincipaltypeenum:2,clusterprincipalpropertiesroleenum:2,clusterproperti:2,clusterproperties_1:2,clusterproperties_1enginetypeenum:2,clusterproperties_1publiciptypeenum:2,clusterproperties_1publicnetworkaccessenum:2,clusterproperties_1restrictoutboundnetworkaccessenum:2,clusterproperties_1stateenum:2,clusterpropertiesenginetypeenum:2,clusterpropertiespubliciptypeenum:2,clusterpropertiespublicnetworkaccessenum:2,clusterpropertiesrestrictoutboundnetworkaccessenum:2,clusterpropertiesstateenum:2,clustersaddlanguageextens:2,clusterschecknameavail:2,clusterscreateorupd:2,clustersdelet:2,clustersdetachfollowerdatabas:2,clustersdiagnosevirtualnetwork:2,clustersget:2,clusterslist:2,clusterslistbyresourcegroup:2,clusterslistfollowerdatabas:2,clusterslistlanguageextens:2,clusterslistoutboundnetworkdependenciesendpoint:2,clusterslistsku:2,clusterslistskusbyresourc:2,clustersmigr:2,clustersremovelanguageextens:2,clustersstart:2,clustersstop:2,clustersupd:2,clusterupd:2,code:3,column:2,columnv1:2,com:10,command:1,common:[2,4,18,21],compareauthenvvar:2,compil:8,compon:8,compress:2,configur:[1,5,7,12,13,16],configurecredenti:2,configureproxyopt:2,connect:[3,21],connectionstr:2,constructorargu:2,contain:4,containercli:2,containernam:2,content:19,control:[1,2],convert:15,cookiejar:2,copi:4,copyfromurl:2,core:2,cosmosdbdataconnect:2,cosmosdbdataconnectionproperti:2,cosmosdbdataconnectionproperties_1:2,count:[1,16],countdown:2,creat:[2,4,13,16],createblobcontain:2,createdirectori:2,createfil:2,createkei:2,createkeyvaultcli:[2,13],createqueu:2,createstoragecli:[2,7,18],createt:2,creation:11,credenti:2,credentialbuilderbas:2,curl:2,curlwrit:2,custom:[4,15,17],data:[1,2,6,7,9,10,11,14,15,16,21,22],databas:2,databaseinvitefollow:2,databaseinvitefollowerrequest:2,databaseinvitefollowerresult:2,databasekindenum:2,databaselistresult:2,databaseprincip:2,databaseprincipalassign:2,databaseprincipalassignmentchecknamerequest:2,databaseprincipalassignmentchecknamerequesttypeenum:2,databaseprincipalassignmentlistresult:2,databaseprincipalassignmentschecknameavail:2,databaseprincipalassignmentscreateorupd:2,databaseprincipalassignmentsdelet:2,databaseprincipalassignmentsget:2,databaseprincipalassignmentslist:2,databaseprincipallistrequest:2,databaseprincipallistresult:2,databaseprincipalproperti:2,databaseprincipalproperties_1:2,databaseprincipalproperties_1principaltypeenum:2,databaseprincipalproperties_1roleenum:2,databaseprincipalpropertiesprincipaltypeenum:2,databaseprincipalpropertiesroleenum:2,databaseprincipalroleenum:2,databaseprincipaltypeenum:2,databasesaddprincip:2,databaseschecknameavail:2,databasescreateorupd:2,databasesdelet:2,databasesget:2,databaseshareorigin:2,databaseslistbyclust:2,databaseslistprincip:2,databasesremoveprincip:2,databasestatist:2,databasesupd:2,dataconnect:2,dataconnectionchecknamerequest:2,dataconnectionchecknamerequesttypeenum:2,dataconnectionkindenum:2,dataconnectionlistresult:2,dataconnectionschecknameavail:2,dataconnectionscreateorupd:2,dataconnectionsdataconnectionvalid:2,dataconnectionsdelet:2,dataconnectionsget:2,dataconnectionslistbydatabas:2,dataconnectionsupd:2,dataconnectionvalid:2,dataconnectionvalidationlistresult:2,dataconnectionvalidationresult:2,datalak:2,datalakedirectorycli:2,datalakefilecli:2,datalakefilesystemcli:2,datalakefilesystemclientbuild:2,datalakepathclientbuild:2,datalakeservicesassignaturevalu:2,datasetcomplet:2,datasethead:2,datat:2,datatablesv1:2,datatablev1:2,datetime2datetim:2,datetime2offsetdatetim:2,debug:2,decod:17,defaultazurecredenti:2,defaultazurecredentialbuild:2,delet:[2,13],deleteblob:2,deleteblobcontain:2,deletecontain:2,deletedirectori:2,deletedkei:2,deletedsecret:2,deletefil:2,deletemessag:2,deletequeu:2,deletesubdirectori:2,deploy:8,devic:3,devicecodecredenti:2,devicecodecredentialbuild:2,devicecodeinfo:2,diagnosevirtualnetworkresult:2,directori:[4,11],disableautomaticauthent:2,disp:2,disperroradditionalinfo:2,disperrordetail:2,disperrorrespons:2,distribut:8,document:16,donotpars:[2,17],doubleorsingle2decim:2,doubleorsingle2r:2,download:[4,15],downloadtofil:2,droptabl:2,duration2timespan:2,dynam:9,element:17,enabl:13,endpoint:[2,4],endpointdepend:2,endpointdetail:2,enhanc:16,environ:[3,21],environmentcredenti:2,environmentcredentialbuild:2,epochdatetim:2,error:[2,10,14],erroradditionalinfo:2,errordetail:2,errorrespons:2,eventgridconnectionproperti:2,eventgridconnectionproperties_1:2,eventgridconnectionproperties_1databaseroutingenum:2,eventgridconnectionpropertiesdatabaseroutingenum:2,eventgriddataconnect:2,eventgriddataformat:2,eventhubconnectionproperti:2,eventhubconnectionproperties_1:2,eventhubconnectionproperties_1databaseroutingenum:2,eventhubconnectionpropertiesdatabaseroutingenum:2,eventhubdataconnect:2,eventhubdataformat:2,exampl:16,examplecustomrowdecod:2,execut:1,exist:[2,4,16],experiment:17,expirytim:2,explor:[6,10,15,16,22],exporttoblob:2,extens:0,field:0,fieldnam:2,file:[0,1,2,8,11,16],filesystem:11,filesystemnam:2,filesystemsaspermiss:2,findtokenincach:2,followerdatabasedefinit:2,followerdatabaselistresult:2,format:11,freeformobject:2,frequent:10,from:1,fromjson:2,fromstr:2,further:22,gen2:[7,16,21,22],gener:[4,15],generateaccountsa:2,generatesa:2,generateuserdelegationsa:2,get:[1,4,16],getaccountinfo:2,getaccountkind:2,getaccountnam:2,getaccounturl:2,getapproximatemessagecount:2,getblobcli:2,getblobcontainernam:2,getblobcontainerurl:2,getblobs:2,getbloburl:2,getcachecontrol:2,getclaim:2,getclientid:2,getcontainercli:2,getcontentencod:2,getcontentlanguag:2,getcontentlength:2,getcontentmd5:2,getcontenttyp:2,getcooki:2,getdatabearertoken:2,getdatasetcompletionfram:2,getdatasethead:2,getdefaultconfigvalu:2,getdeletedkei:2,getdeletedon:2,getdeletedsecret:2,getdequeuecount:2,getdetail:2,getdirectorypath:2,getdirectoryurl:2,getexpirationtim:2,getexpireson:2,getfilecli:2,getfilepath:2,getfileurl:2,getfulltoken:2,getid:2,getingestionresourc:2,getinsertiontim:2,getkei:2,getkeyid:2,getkeytyp:2,getkustoidentitytoken:2,getleaseid:2,getlogg:2,getmaxresultsperpag:2,getmessag:2,getmessageid:2,getmessagetext:2,getmetadata:2,getnam:2,getoauthtoken:2,getpayload:2,getpopreceipt:2,getprefix:2,getproperti:2,getpropertygroup:2,getpropertyinfo:2,getqueuecli:2,getqueuenam:2,getqueueserviceurl:2,getqueueurl:2,getrecoveryid:2,getresourceurl:2,getretrievecopi:2,getretrievedeletedblob:2,getretrievedeletedblobswithvers:2,getretrieveimmutabilitypolici:2,getretrievelegalhold:2,getretrievemetadata:2,getretrievesnapshot:2,getretrievetag:2,getretrieveuncommittedblob:2,getretrievevers:2,getretryaft:2,getrowswithschema:2,getrowwithschema:2,getscheduledpurged:2,getscop:2,getsecret:2,getservicecli:2,getsignatur:2,getsignedexpiri:2,getsignedstart:2,getsnapshot:2,getstatu:2,gettableandschema:2,gettableschema:2,gettag:2,gettenantid:2,gettimenextvis:2,gettoken:2,gettokensync:2,getusercod:2,getuserdelegationkei:2,getvalu:2,getvaulturl:2,getverificationurl:2,getvers:2,getversionid:2,ha:4,handl:1,hasaddpermiss:2,hasblobaccess:2,hascreatepermiss:2,hasdeletepermiss:2,hasexecutepermiss:2,hasfileaccess:2,haslistpermiss:2,hasmanageaccesscontrolpermiss:2,hasmanageownershippermiss:2,hasmovepermiss:2,hasprivatekei:2,hasprocessmessag:2,hasprocesspermiss:2,hasqueueaccess:2,hasreadpermiss:2,hastableaccess:2,hasupdatepermiss:2,haswritepermiss:2,hello:[1,16],help:2,high:11,higher:1,how:10,httpclient:2,ident:[2,3,10],identity_userassignedidentities_valu:2,identitytypeenum:2,index:2,ingest:[1,2],ingestfil:2,ingestfilequeu:2,ingestfromqueri:2,ingestinlin:2,ingestionresourcessnapshot:2,ingestrun:2,ingestt:2,ingesttablequeu:2,initi:2,initializecach:2,instal:[12,15],int2intorlong:2,int64fnhandl:2,interact:[3,4],interactivebrowsercredenti:2,interactivebrowsercredentialbuild:[2,10],interfac:[1,2,7,16,19,22],intern:2,iothubconnectionproperti:2,iothubconnectionproperties_1:2,iothubconnectionproperties_1databaseroutingenum:2,iothubconnectionpropertiesdatabaseroutingenum:2,iothubdataconnect:2,iothubdataformat:2,isclusterrun:2,iscomplet:2,iscontain:2,isdelet:2,isdirectori:2,isexpir:2,ismappablematlabtokusto:2,isobject:2,isprefix:2,isservic:2,istimevalid:2,isvalid:2,jar:[8,12],java:[10,12],javaclasspath:8,json:3,jsonarrai:2,jsonencod:2,jsonenum:2,jsonmapp:2,jsonmappermap:2,jsonpropertyinfo:2,jsonwebkei:2,jwt:2,kei:[2,3,13,16,21,22],keyclient:2,keyclientbuild:2,keyproperti:2,keytyp:2,keyvault:[2,21],keyvaultkei:2,keyvaultproperti:2,keyvaultsecret:2,kql:1,kqlqueri:[1,2],kusto:16,kustoschematonamesandtyp:2,lake:[7,11,16,21,22],languageextens:2,languageextension_1:2,languageextensionimagenam:2,languageextensionnam:2,languageextensionslist:2,leas:[4,16],leaseid:2,level:[1,7,10,11],librari:10,licens:16,list:[1,4,13,16],listblob:2,listblobcontain:2,listblobsbyhierarchi:2,listblobsopt:[2,4],listdeletedkei:2,listdeletedsecret:2,listpath:2,listpropertiesofkei:2,listpropertiesofsecret:2,listqueu:2,listresourceskusresult:2,listtabl:2,load:2,loadconfig:2,loadconfigfil:2,loadconfigurationset:2,local:1,log:[2,10],logger:2,logical2bool:2,longrunningoperationstatu:2,low:[1,7],lower:1,make:8,manag:[1,2,3],managedidentityclientid:2,managedidentitycredenti:2,managedidentitycredentialbuild:2,managedprivateendpoint:2,managedprivateendpointlistresult:2,managedprivateendpointproperti:2,managedprivateendpointproperties_1:2,managedprivateendpointschecknameavail:2,managedprivateendpointschecknamerequest:2,managedprivateendpointschecknamerequesttypeenum:2,managedprivateendpointscreateorupd:2,managedprivateendpointsdelet:2,managedprivateendpointsget:2,managedprivateendpointslist:2,managedprivateendpointsupd:2,managementrequest:2,managementrun:2,maptypeskustotomatlab:2,maptypesmatlabtokusto:2,mathwork:2,matlab:[2,8,12,15,16,19,22],maxretri:2,metadata:4,mgtcommand:2,migrationclusterproperti:2,migrationclusterpropertiesroleenum:2,misc:11,model:2,modifi:8,msoauth2client:2,multi:7,myservicespecificset:3,name:[7,10,13],next:8,notbeforetim:2,note:11,npx:15,nullpolici:2,number:16,object:2,openapi:15,openlogfil:2,oper:[2,4,11,13,18],operationlistresult:2,operationresult:2,operationresulterrorproperti:2,operationresultproperti:2,operationslist:2,operationsresultsget:2,optimizedautoscal:2,option:[7,8,13],outboundnetworkdependenciesendpoint:2,outboundnetworkdependenciesendpointlistresult:2,outboundnetworkdependenciesendpointproperti:2,overview:22,pair:[7,13],parallel:17,parquet:1,pars:[2,17],path:12,pathitem:2,pathnam:2,pathproperti:2,pathsaspermiss:2,peekedmessageitem:2,peekmessag:2,pemcertif:2,perform:17,permiss:11,persist:2,polici:2,poll:2,pollrespons:2,postsend:2,prefix:4,presend:2,privateendpointconnect:2,privateendpointconnectionlistresult:2,privateendpointconnectionproperti:2,privateendpointconnectionscreateorupd:2,privateendpointconnectionsdelet:2,privateendpointconnectionsget:2,privateendpointconnectionslist:2,privateendpointproperti:2,privatelinkresourc:2,privatelinkresourcelistresult:2,privatelinkresourceproperti:2,privatelinkresourcesget:2,privatelinkresourceslist:2,privatelinkserviceconnectionstateproperti:2,process:17,processmessag:2,progress:1,properti:[1,4],protocol:7,provisioningst:2,proxyresourc:2,purg:[2,13],purgedeletedkei:2,purgedeletedsecret:2,queri:[1,2,16],queryparamet:2,queryrequest:2,queryrun:2,queryv1response2t:2,queryv1responseraw:2,queryv2response2t:2,queryv2responseraw:2,queryv2responseunparsedrow:2,question:10,queue:[2,16,18],queueclient:2,queueclientbuild:2,queueingestionmessag:2,queueitem:2,queuemessageitem:2,queuenam:2,queueproperti:2,queuesaspermiss:2,queueservicecli:2,queueserviceclientbuild:2,queueservicesassignaturevalu:2,readonlyfollowingdatabas:2,readonlyfollowingdatabaseproperti:2,readonlyfollowingdatabaseproperties_1:2,readonlyfollowingdatabaseproprincipalsmodificationkindenum_0000:2,readonlyfollowingdatabaseproprincipalsmodificationkindenum_0001:2,readtofil:2,readwritedatabas:2,readwritedatabaseproperti:2,readwritedatabaseproperties_1:2,receivemessag:2,recov:13,redirecturl:2,refer:[0,1,2,14,20],refreshtoken:2,registr:21,releas:4,releaseleas:2,renam:2,renew:4,renewleas:2,repositori:12,request:[1,16],requestauth:2,requestretryopt:2,requir:16,resolv:10,resourc:2,resourceid:2,resourceskucap:2,resourceskuzonedetail:2,rest:1,restflow:2,restgetsa:2,retryopt:2,retrypolicytyp:2,row:[1,2,16,17],rowsunpars:2,rowunpars:2,run:[1,2],runtim:8,sa:[2,4,11,21],sampl:3,sanitizeblobnam:2,sass:11,sastoken:2,savecach:2,scope:3,script:2,scriptchecknamerequest:2,scriptchecknamerequesttypeenum:2,scriptlistresult:2,scriptproperti:2,scriptproperties_1:2,scriptslistbydatabas:2,sdk:[8,10,12],secret:[0,2,3,13,16],secretcli:2,secretclientbuild:2,secretproperti:2,secur:2,sendmessag:2,sendmessageresult:2,servic:[2,4,5,16,18,19,22],set:[0,5],setaddpermiss:2,setanonymousaccess:2,setblobaccess:2,setclaim:2,setcontain:2,setcooki:2,setcreatepermiss:2,setcustomqueryhead:2,setdefaultconfigvalu:2,setdeletepermiss:2,setdequeuecount:2,setdetail:2,setexecutepermiss:2,setexpirationtim:2,setfileaccess:2,setinsertiontim:2,setlistpermiss:2,setmanageaccesscontrolpermiss:2,setmanageownershippermiss:2,setmaxresultsperpag:2,setmessageid:2,setmessagetext:2,setmovepermiss:2,setnam:2,setobject:2,setpopreceipt:2,setprefix:2,setprocessmessag:2,setprocesspermiss:2,setqueueaccess:2,setreadpermiss:2,setretrievecopi:2,setretrievedeletedblob:2,setretrievedeletedblobswithvers:2,setretrieveimmutabilitypolici:2,setretrievelegalhold:2,setretrievemetadata:2,setretrievesnapshot:2,setretrievetag:2,setretrieveuncommittedblob:2,setretrievevers:2,setsecret:2,setservic:2,setsystemproperti:2,settableaccess:2,settenantid:2,settimenextvis:2,setup:16,setupdatepermiss:2,setwritepermiss:2,share:[3,4],sharedtokencachecredenti:2,sharedtokencachecredentialbuild:2,signatur:4,skip:17,skiprowsarraydecod:17,skudescript:2,skudescriptionlist:2,skulocationinfoitem:2,skuslist:2,soft:13,some:16,spec:15,special:2,specif:5,standalon:8,start:1,statu:2,storag:[2,3,4,7,11,16,18,20,21,22],storageaccountinfo:2,storagesharedkeycredenti:2,streamformat:2,string:[3,21],stringdatetim:2,subsasgn:2,subscrib:2,subsref:2,support:[4,16],suspensiondetail:2,syncpol:2,systemdata:2,systemdatacreatedbytypeenum:2,systemdatalastmodifiedbytypeenum:2,tabl:[1,2,16],tablecomplet:2,tableexist:2,tablefrag:2,tablefragmenttyp:2,tablehead:2,tablekind:2,tablelevelsharingproperti:2,tableprogress:2,tenantid:2,test:[4,21],the_object_that_describes_the_operation_:2,thi:12,three:8,timespanliteral2dur:2,timespanvalue2dur:2,toae:2,todynam:2,toec:2,tojava:2,token:[0,3,21],tokencachepersistenceopt:[2,3],tokencredenti:2,tokenrequestcontext:2,tokustoliter:2,topic:22,torsa:2,tostr:2,trackedresourc:2,trustedexternalten:2,tsql:1,tsqlqueri:2,two:8,txt:8,unabl:10,underli:10,unit:21,updat:2,upload:4,uploadfromfil:2,url:[4,11],us:[1,4,15,16],usag:16,userdelegationkei:2,util:2,uuid:2,validateconfig:2,valu:[7,13,16],valueof:2,variabl:[3,21],vault:[13,16,21,22],vaulturl:2,verbos:2,virtualnetworkconfigur:2,waitforcomplet:2,warn:2,which:4,work:11,world:[1,16],write:2}}) \ No newline at end of file diff --git a/Documentation/index.md b/Documentation/index.md new file mode 100644 index 0000000..2062354 --- /dev/null +++ b/Documentation/index.md @@ -0,0 +1,34 @@ +# MATLAB Interface *for Azure Services* + +**Refer to the HTML documentation for the latest version of this help information with enhanced navigation, discoverability, and readability.** + +**** + +## Contents + +* [Overview](Overview.md) +* Azure Data Explorer + * [ADX Getting Started](ADXGettingStarted.md) + * [ADX Authentication](ADXAuthentication.md) + * [Null Data](NullData.md) + * [Dynamics](Dynamics.md) + * [Performance](Performance.md) + * [OpenAPI](OpenAPI.md) +* Azure Data Lake Storage Gen2 + * [Installation](Installation.md) + * [Configuration](Configuration.md) + * [Azure Data Lake Storage Gen2](DataLakeStorageGen2.md) + * [Authentication](Authentication.md) +* Azure Key Vault + * [Installation](Installation.md) + * [Configuration](Configuration.md) + * [Azure Key Vault](KeyVault.md) + * [Authentication](Authentication.md) +* Further Topics + * [MATLAB Compiler (SDK) Deployment](Deployment.md) + * [Testing](Testing.md) + * [FAQ](FAQ.md) + * [API Reference](APIReference.md) + * [References](References.md) + +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/Documentation/index.rst b/Documentation/index.rst index 1933d30..ca1057d 100644 --- a/Documentation/index.rst +++ b/Documentation/index.rst @@ -1,6 +1,3 @@ -.. Sphinx Theme documentation master file, created by - sphinx-quickstart on Fri Oct 9 13:57:23 2020. - MATLAB Interface *for Azure Services* ===================================== @@ -11,29 +8,43 @@ MATLAB Interface *for Azure Services* Overview .. toctree:: - :maxdepth: 2 - :caption: Installation & Configuration + :maxdepth: 1 + :caption: Azure Data Explorer + + ADXGettingStarted + ADXAuthentication + NullData + Dynamics + Performance + OpenAPI + +.. toctree:: + :maxdepth: 1 + :caption: Azure Key Vault Installation Configuration + Authentication + KeyVault .. toctree:: - :maxdepth: 2 - :caption: Usage + :maxdepth: 1 + :caption: Azure Data Lake Storage Gen2 + Installation + Configuration Authentication - - Services - - APIReference + DataLakeStorageGen2 + File + Queue .. toctree:: :maxdepth: 2 - :caption: Advanced Topics + :caption: Further topics Deployment Testing FAQ - + APIReference References diff --git a/README.md b/README.md index 7c88029..6b530cf 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,51 @@ # MATLAB Interface *for Azure Services* -## Introduction - -This package offers MATLAB™ interfaces that connect to various Microsoft Azure® -Services it currently supports: +This package provides MATLAB® interfaces that connect to various Microsoft Azure® +Services, it currently supports: * [Azure Data Lake Storage Gen2](https://mathworks-ref-arch.github.io/matlab-azure-services/DataLakeStorageGen2.html) * [Azure Key Vault](https://mathworks-ref-arch.github.io/matlab-azure-services/KeyVault.html) +* [Azure Data Explorer](https://mathworks-ref-arch.github.io/matlab-azure-services/DataExplorer.html) > Note, very many of MATLAB's IO operations support Blob Storage via builtin functions. -> For example ```dir``` supports accessing remote data: +> For example `dir` supports accessing remote data: > -> * [https://www.mathworks.com/help/matlab/ref/dir.html](https://www.mathworks.com/help/matlab/ref/dir.html), -> * [https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html](https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html). +> * [https://www.mathworks.com/help/matlab/ref/dir.html](https://www.mathworks.com/help/matlab/ref/dir.html) +> * [https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html](https://www.mathworks.com/help/matlab/import_export/work-with-remote-data.html) > -> Where MATLAB supports the required operations directly that is the recommended -> approach. +> Where MATLAB supports the required operations, it is recommended to use the builtin +> support, particularly in preference to this package's Azure Data Lake Storage Gen2 +> lower level capabilities. ## Requirements * [MathWorks®](http://www.mathworks.com) Products - * MATLAB® release R2019a or later - * (optional) MATLAB Compiler™ and Compiler SDK™ - * (optional) MATLAB Production Server™ - * (optional) MATLAB Parallel Server™ -* 3rd party products + * MATLAB® R2019a or later + * MATLAB® R2021a or later if using Azure Data Explorer +* 3rd party products (Required to build the Azure SDK jar file) * Maven™ 3.6.1 or later - * JDK 8 or later - -This package is primarily tested using Ubuntu™ 20.04 and Windows® 11. + * JDK v8 or greater and less than v18 ## Documentation -The main documentation for this package is available at: - - +The primary documentation for this package is available at: [https://mathworks-ref-arch.github.io/matlab-azure-services](https://mathworks-ref-arch.github.io/matlab-azure-services) ## Usage -Once [installed](https://mathworks-ref-arch.github.io/matlab-azure-services/Installation.html) the interface is added to the MATLAB path -by running `startup.m` from the `Software/MATLAB` directory. +Once [installed](https://mathworks-ref-arch.github.io/matlab-azure-services/Installation.html) +the interface can be added to the MATLAB path by running `startup.m` from the `Software/MATLAB` directory. +Also refer to configuration and authentication details below. -### Azure Data Lake Storage Gen2 +## Azure Data Lake Storage Gen2 examples -#### Create a Blob Client and check if a blob exists +### Create a Blob Client and check if a blob exists ```matlab blobClient = createStorageClient('ContainerName','myContainer','BlobName','myBlob') tf = blobClient.exists(); ``` -#### Acquire a lease for a blob +### Acquire a lease for a blob ```matlab builder = azure.storage.blob.specialized.BlobLeaseClientBuilder; @@ -61,14 +56,14 @@ leaseClient = builder.buildClient(); leaseId = leaseClient.acquireLease(30) ``` -#### Create Queue Service Client and create a queue +### Create Queue Service Client and create a queue ```matlab queueServiceClient = createStorageClient('Type','QueueService'); queueClient = queueServiceClient.createQueue('myqueuename'); ``` -#### Create File Data Lake (file) Client and check if the file exists +### Create File Data Lake (file) Client and check if the file exists ```matlab dataLakeFileClient = createStorageClient('FileSystemName','myFileSystem',... @@ -78,9 +73,9 @@ tf = dataLakeFileClient.exists(); For further details see: [Azure Data Lake Storage Gen2](https://mathworks-ref-arch.github.io/matlab-azure-services/DataLakeStorageGen2.html) -### Azure Key Vault +## Azure Key Vault -#### Create a Secret Client and get a secret value +### Create a Secret Client and get a secret value ```matlab secretClient = createKeyVaultClient('Type','Secret'); @@ -90,7 +85,7 @@ secret = secretClient.getSecret('mySecretName'); secretValue = secret.getValue(); ``` -#### List keys in a vault +### List keys in a vault ```matlab % Create a client @@ -103,7 +98,64 @@ name = propList(1).getName(); For further details see: [Azure Key Vault](https://mathworks-ref-arch.github.io/matlab-azure-services/KeyVault.html) -### Configuration +## Azure Data Explorer + +This package provides access to Azure Data Explorer related features from within MATLAB. +Lower-level interfaces to the Azure Data Explorer REST APIs are provided along with +some higher-level interfaces for common tasks. +The Control plane REST API client is automatically generated based upon the OpenAPI spec. +provided in [https://github.com/Azure/azure-rest-api-specs/tree/main/specification](https://github.com/Azure/azure-rest-api-specs/tree/main/specification). + +### Return "Hello World" using a Kusto query + +```matlab +>> [result, success] = mathworks.adx.run('print myColumn="Hello World"') +result = + table + myColumn + _____________ + "Hello World" +success = + logical + 1 +``` + +### A query to count the number of rows in a table + +```matlab +>> rowCount = mathworks.adx.run(sprintf("myTableName | count", tableName)) +rowCount = + table + Count + ______ + 123523 +``` + +### Return some rows in a table + +```matlab +>> firstRows = mathworks.adx.run("myTableName | take 5") +firstRows = + 5x27 table + Date DayOfWeek DepTime CRSDepTime + ___________ _________ ____________________ ____________________ + 21-Oct-1987 3 21-Oct-1987 06:42:00 21-Oct-1987 06:30:00 + 26-Oct-1987 1 26-Oct-1987 10:21:00 26-Oct-1987 10:20:00 + 23-Oct-1987 5 23-Oct-1987 20:55:00 23-Oct-1987 20:35:00 + 23-Oct-1987 5 23-Oct-1987 13:32:00 23-Oct-1987 13:20:00 + 22-Oct-1987 4 22-Oct-1987 06:29:00 22-Oct-1987 06:30:00 +``` + +## Configuration & authentication + +While the packages share some common configuration and authentication code they +also have separate configuration details to record preferred default endpoints +and authentication methods. + +### Azure Data Lake Storage Gen2 & Azure Key Vault setup + +First change to the `matlab-azure-services/Software/MATLAB` directory and run the +startup command to configure paths. The package offers a `loadConfigurationSettings` function which allows reading configuration settings from a short JSON format file. This offers a convenient @@ -111,12 +163,35 @@ way for you to configure various settings (like endpoint URLs) as well as authentication configurations without having to hardcode these into your MATLAB code. For more details see: [Configuration](https://mathworks-ref-arch.github.io/matlab-azure-services/Configuration.html) -### Authentication - Virtually all interactions with Azure will require some form of authentication. -The authentication workflows are common to all services. The package offers -various Builder classes as well as a higher-level function `configureCredentials` -to aid performing the authentication. For more details see: [Authentication](https://mathworks-ref-arch.github.io/matlab-azure-services/Authentication.html) +The package offers various Builder classes as well as a higher-level function +`configureCredentials` to aid performing the authentication. For more details +see: [Authentication](https://mathworks-ref-arch.github.io/matlab-azure-services/Authentication.html) + +### Azure Data Explorer setup + +First change to the `matlab-azure-services/Software/MATLAB` directory and run the +startup command to configure paths. + +Initially run `mathworks.adx.buildSettingsFile`, to configure credentials & settings. +For more details see: [ADXAuthentication.md](Documentation/ADXAuthentication.md). +A number of authentication methods are supported. + +Assuming Client Secret authentication, the simplest to configure, this should result +in a file: `Software/MATLAB/config/adx.Client.Settings.json` similar to: + +```json +{ + "preferredAuthMethod" : "clientSecret", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "clientSecret" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} +``` ## License @@ -135,4 +210,6 @@ link: [https://www.mathworks.com/products/reference-architectures/request-new-re Please create a GitHub issue. -[//]: # (Copyright 2021-2022 The MathWorks, Inc.) +Microsoft Azure Data Explorer, Azure Data Lake Storage & Azure Key Vault are trademarks of the Microsoft group of companies. + +[//]: # (Copyright 2021-2024 The MathWorks, Inc.) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c61f30a..b3df138 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -2,6 +2,20 @@ ## Release Notes +## Release 1.0.1 September 10th 2024 + +* Jar shading fix +* Removed internal, experimental & partial ADX JDBC support + +## Release 1.0.0 July 21st 2024 + +* Added Azure Data Explorer support +* Increased Azure SDK BOM version to 1.2.24 +* Added azure.storage.queue.QueueClient.receiveMessages +* Added azure.storage.blob.models.BlobProperties.getBlobSize +* Moved compareAuthEnvVars to azure.mathworks.internal.compareAuthEnvVars *Breaking change* +* Moved datetime2OffsetDateTime to azure.mathworks.internal.datetime2OffsetDateTime *Breaking change* + ## Release 0.3.2 April 14th 2023 * Typo fix in `configureCredentials`. diff --git a/Software/Java/pom.xml b/Software/Java/pom.xml index b2ad6f0..d761eae 100644 --- a/Software/Java/pom.xml +++ b/Software/Java/pom.xml @@ -22,7 +22,7 @@ com.azure azure-sdk-bom - 1.2.11 + 1.2.24 pom import @@ -93,6 +93,11 @@ org.apache.maven.plugins maven-shade-plugin + + + + + 3.2.4 @@ -136,7 +141,7 @@ com.ctc.wstx shaded.com.ctc.wstx - + io.netty shaded.io.netty diff --git a/Software/Java/src/main/java/com/mathworks/azure/sdk/Version.java b/Software/Java/src/main/java/com/mathworks/azure/sdk/Version.java index 3472fac..31e39fd 100644 --- a/Software/Java/src/main/java/com/mathworks/azure/sdk/Version.java +++ b/Software/Java/src/main/java/com/mathworks/azure/sdk/Version.java @@ -1,5 +1,6 @@ package com.mathworks.azure.sdk; - +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; /** * Sanity Check! * @@ -13,4 +14,39 @@ public static void main(String[] argv) { System.out.println( "Class Loaded" ); } + + public static String longToString(long x) + { + return String.valueOf(x); + } + + // No arguments are supported + public static String invokeNamedMethodToString(Object obj, String methodName) + { + java.lang.reflect.Method method; + try { + method = obj.getClass().getMethod(methodName); + try { + return String.valueOf(method.invoke(obj)); + } + catch (IllegalArgumentException e) { + System.err.println("Exception: IllegalArgumentException"); + } + catch (IllegalAccessException e) { + System.err.println("Exception: IllegalAccessException"); + } + catch (InvocationTargetException e) { + System.err.println("Exception: InvocationTargetException"); + } + } + catch (SecurityException e) { + System.err.println("Exception: SecurityException"); + } + catch (NoSuchMethodException e) { + System.err.printf("Exception: NoSuchMethodException: %s\n", methodName); + } + + System.err.println( "Unexpected state, returning \"\""); + return ""; + } } diff --git a/Software/MATLAB/.gitignore b/Software/MATLAB/.gitignore index 8126a70..1bbc508 100644 --- a/Software/MATLAB/.gitignore +++ b/Software/MATLAB/.gitignore @@ -1 +1,2 @@ javaclasspath.txt +setLocalEnvVars.sh diff --git a/Software/MATLAB/app/functions/AzureCommonRoot.m b/Software/MATLAB/app/functions/AzureCommonRoot.m index 8a75919..4488f4f 100644 --- a/Software/MATLAB/app/functions/AzureCommonRoot.m +++ b/Software/MATLAB/app/functions/AzureCommonRoot.m @@ -1,12 +1,27 @@ function [str] = AzureCommonRoot(varargin) -% AZURECOMMONROOT Helper function to locate the Azure Common location -% Locate the installation of the Azure interface package to allow easier construction -% of absolute paths to the required dependencies. - -% Copyright 2020-2021 The MathWorks, Inc. - -% TODO Remove and replace with just one common root - -str = fileparts(fileparts(fileparts(mfilename('fullpath')))); + % AZURECOMMONROOT Return Azure Services root location + % Locate the installation of the Azure interface package to allow easier construction + % + % The special argument of a negative number will move up folders, e.g. + % the following call will move up two folders, and then into + % Documentation. + % + % docDir = AzureCommonRoot(-2, 'Documentation') + + % Copyright 2020-2024 The MathWorks, Inc. + + str = fileparts(fileparts(fileparts(mfilename('fullpath')))); + for k=1:nargin + arg = varargin{k}; + if isstring(arg) || ischar(arg) + str = fullfile(str, arg); + elseif isnumeric(arg) && arg < 0 + for levels = 1:abs(arg) + str = fileparts(str); + end + else + error('Azure:AzureCommonRoot_bad_argument', 'Bad argument for AzureCommonRoot'); + end + end end %function diff --git a/Software/MATLAB/app/functions/configureCredentials.m b/Software/MATLAB/app/functions/configureCredentials.m index a6dc8a2..42fd280 100644 --- a/Software/MATLAB/app/functions/configureCredentials.m +++ b/Software/MATLAB/app/functions/configureCredentials.m @@ -107,7 +107,7 @@ write(logObj,'verbose',' or AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH and AZURE_TENANT_ID'); write(logObj,'verbose',' or AZURE_CLIENT_ID, AZURE_USERNAME and AZURE_PASSWORD'); end - if ~compareAuthEnvVars + if ~azure.mathworks.internal.compareAuthEnvVars % Check for mismatches in Java and MATLAB that might indicate misconfiguration write(logObj,'warning','There is a mismatch between authentication variables in the MATLAB and Java contexts, the Azure SDK will use the Java values. To enable both, set variables in the environment used to start MATLAB.'); end @@ -246,7 +246,13 @@ end trc = azure.core.credential.TokenRequestContext(); - trc.addScopes(settings.Scopes{:}); + if ischar(settings.Scopes) || isstring(settings.Scopes) + trc.addScopes(settings.Scopes); + elseif iscellstr(settings.Scopes) + trc.addScopes(settings.Scopes{:}); + else + write(logObj,'error','Unexpected settings.Scopes field type'); + end if (isfield(settings,'TokenCachePersistenceOptions')) % If persistence is requested, create sharedTokenCredential @@ -258,7 +264,7 @@ % sharedTokenCredential and do not bother building a % DeviceCodeCredential, it is not needed catch - % If this failed, create a DeviceCodeCredentialBuiler + % If this failed, create a DeviceCodeCredentialBuilder dvcbuilder = createDeviceCodeCredentialBuilder(settings); % Add persistence options dvcbuilder = dvcbuilder.tokenCachePersistenceOptions(tokenCachePersistanceOptions); diff --git a/Software/MATLAB/app/system/+adx/+control/+api/AttachedDatabaseConfigurations.m b/Software/MATLAB/app/system/+adx/+control/+api/AttachedDatabaseConfigurations.m new file mode 100644 index 0000000..f7a2acb --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/AttachedDatabaseConfigurations.m @@ -0,0 +1,699 @@ +classdef AttachedDatabaseConfigurations < adx.control.BaseClient + % AttachedDatabaseConfigurations No description provided + % + % AttachedDatabaseConfigurations Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % AttachedDatabaseConfigurations Methods: + % + % AttachedDatabaseConfigurations - Constructor + % attachedDatabaseConfigurationsCheckNameAvailability - + % attachedDatabaseConfigurationsCreateOrUpdate - + % attachedDatabaseConfigurationsDelete - + % attachedDatabaseConfigurationsGet - + % attachedDatabaseConfigurationsListByCluster - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = AttachedDatabaseConfigurations(options) + % AttachedDatabaseConfigurations Constructor, creates a AttachedDatabaseConfigurations instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.AttachedDatabaseConfigurations(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.AttachedDatabaseConfigurations("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.AttachedDatabaseConfigurations("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.AttachedDatabaseConfigurations("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = attachedDatabaseConfigurationsCheckNameAvailability(obj, resourceGroupName, clusterName, api_version, subscriptionId, AttachedDatabaseConfigurationsCheckNameRequest) + % attachedDatabaseConfigurationsCheckNameAvailability No summary provided + % Checks that the attached database configuration resource name is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % AttachedDatabaseConfigurationsCheckNameRequest - The name of the resource., Type: AttachedDatabaseConfigurationsCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.AttachedDatabaseConfigurations + resourceGroupName string + clusterName string + api_version string + subscriptionId string + AttachedDatabaseConfigurationsCheckNameRequest adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:attachedDatabaseConfigurationsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:attachedDatabaseConfigurationsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/attachedDatabaseConfigurationCheckNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = AttachedDatabaseConfigurationsCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("attachedDatabaseConfigurationsCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("attachedDatabaseConfigurationsCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % attachedDatabaseConfigurationsCheckNameAvailability method + + function [code, result, response] = attachedDatabaseConfigurationsCreateOrUpdate(obj, resourceGroupName, clusterName, attachedDatabaseConfigurationName, subscriptionId, api_version, AttachedDatabaseConfiguration) + % attachedDatabaseConfigurationsCreateOrUpdate No summary provided + % Creates or updates an attached database configuration. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % AttachedDatabaseConfiguration - The database parameters supplied to the CreateOrUpdate operation., Type: AttachedDatabaseConfiguration + % Required properties in the model for this call: + % Optional properties in the model for this call: + % location + % xproperties + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the database. + % 201: Successfully created the database. + % 202: Accepted the create database request. + % 0: Error response describing why the operation failed. + % + % Returns: AttachedDatabaseConfiguration + % + % See Also: adx.control.models.AttachedDatabaseConfiguration + + arguments + obj adx.control.api.AttachedDatabaseConfigurations + resourceGroupName string + clusterName string + attachedDatabaseConfigurationName string + subscriptionId string + api_version string + AttachedDatabaseConfiguration adx.control.models.AttachedDatabaseConfiguration + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:attachedDatabaseConfigurationsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:attachedDatabaseConfigurationsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/attachedDatabaseConfigurations/{attachedDatabaseConfigurationName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "attachedDatabaseConfigurationName" +"}") = attachedDatabaseConfigurationName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "location",... + "xproperties",... + ]; + request.Body(1).Payload = AttachedDatabaseConfiguration.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("attachedDatabaseConfigurationsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("attachedDatabaseConfigurationsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.AttachedDatabaseConfiguration(response.Body.Data); + case 201 + result = adx.control.models.AttachedDatabaseConfiguration(response.Body.Data); + case 202 + result = adx.control.models.AttachedDatabaseConfiguration(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % attachedDatabaseConfigurationsCreateOrUpdate method + + function [code, result, response] = attachedDatabaseConfigurationsDelete(obj, resourceGroupName, clusterName, attachedDatabaseConfigurationName, subscriptionId, api_version) + % attachedDatabaseConfigurationsDelete No summary provided + % Deletes the attached database configuration with the given name. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully deleted the database. + % 202: Accepted. + % 204: The specified database does not exist. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.AttachedDatabaseConfigurations + resourceGroupName string + clusterName string + attachedDatabaseConfigurationName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:attachedDatabaseConfigurationsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/attachedDatabaseConfigurations/{attachedDatabaseConfigurationName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "attachedDatabaseConfigurationName" +"}") = attachedDatabaseConfigurationName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("attachedDatabaseConfigurationsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("attachedDatabaseConfigurationsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % attachedDatabaseConfigurationsDelete method + + function [code, result, response] = attachedDatabaseConfigurationsGet(obj, resourceGroupName, clusterName, attachedDatabaseConfigurationName, subscriptionId, api_version) + % attachedDatabaseConfigurationsGet No summary provided + % Returns an attached database configuration. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % attachedDatabaseConfigurationName - The name of the attached database configuration., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the specified attached database configuration. + % 0: Error response describing why the operation failed. + % + % Returns: AttachedDatabaseConfiguration + % + % See Also: adx.control.models.AttachedDatabaseConfiguration + + arguments + obj adx.control.api.AttachedDatabaseConfigurations + resourceGroupName string + clusterName string + attachedDatabaseConfigurationName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:attachedDatabaseConfigurationsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/attachedDatabaseConfigurations/{attachedDatabaseConfigurationName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "attachedDatabaseConfigurationName" +"}") = attachedDatabaseConfigurationName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("attachedDatabaseConfigurationsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("attachedDatabaseConfigurationsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.AttachedDatabaseConfiguration(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % attachedDatabaseConfigurationsGet method + + function [code, result, response] = attachedDatabaseConfigurationsListByCluster(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % attachedDatabaseConfigurationsListByCluster No summary provided + % Returns the list of attached database configurations of the given Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the list of attached database configurations. + % 0: Error response describing why the operation failed. + % + % Returns: AttachedDatabaseConfigurationListResult + % + % See Also: adx.control.models.AttachedDatabaseConfigurationListResult + + arguments + obj adx.control.api.AttachedDatabaseConfigurations + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:attachedDatabaseConfigurationsListByCluster:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","attachedDatabaseConfigurationsListByCluster") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/attachedDatabaseConfigurations"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("attachedDatabaseConfigurationsListByCluster", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("attachedDatabaseConfigurationsListByCluster", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.AttachedDatabaseConfigurationListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % attachedDatabaseConfigurationsListByCluster method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/ClusterPrincipalAssignments.m b/Software/MATLAB/app/system/+adx/+control/+api/ClusterPrincipalAssignments.m new file mode 100644 index 0000000..43b0c5e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/ClusterPrincipalAssignments.m @@ -0,0 +1,694 @@ +classdef ClusterPrincipalAssignments < adx.control.BaseClient + % ClusterPrincipalAssignments No description provided + % + % ClusterPrincipalAssignments Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % ClusterPrincipalAssignments Methods: + % + % ClusterPrincipalAssignments - Constructor + % clusterPrincipalAssignmentsCheckNameAvailability - + % clusterPrincipalAssignmentsCreateOrUpdate - + % clusterPrincipalAssignmentsDelete - + % clusterPrincipalAssignmentsGet - + % clusterPrincipalAssignmentsList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = ClusterPrincipalAssignments(options) + % ClusterPrincipalAssignments Constructor, creates a ClusterPrincipalAssignments instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.ClusterPrincipalAssignments(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.ClusterPrincipalAssignments("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.ClusterPrincipalAssignments("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.ClusterPrincipalAssignments("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = clusterPrincipalAssignmentsCheckNameAvailability(obj, resourceGroupName, clusterName, api_version, subscriptionId, ClusterPrincipalAssignmentCheckNameRequest) + % clusterPrincipalAssignmentsCheckNameAvailability No summary provided + % Checks that the principal assignment name is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % ClusterPrincipalAssignmentCheckNameRequest - The name of the principal assignment., Type: ClusterPrincipalAssignmentCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.ClusterPrincipalAssignments + resourceGroupName string + clusterName string + api_version string + subscriptionId string + ClusterPrincipalAssignmentCheckNameRequest adx.control.models.ClusterPrincipalAssignmentCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clusterPrincipalAssignmentsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clusterPrincipalAssignmentsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/checkPrincipalAssignmentNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = ClusterPrincipalAssignmentCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clusterPrincipalAssignmentsCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clusterPrincipalAssignmentsCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clusterPrincipalAssignmentsCheckNameAvailability method + + function [code, result, response] = clusterPrincipalAssignmentsCreateOrUpdate(obj, subscriptionId, resourceGroupName, clusterName, principalAssignmentName, api_version, ClusterPrincipalAssignment) + % clusterPrincipalAssignmentsCreateOrUpdate No summary provided + % Create a Kusto cluster principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % ClusterPrincipalAssignment - The Kusto cluster principalAssignment''s parameters supplied for the operation., Type: ClusterPrincipalAssignment + % Required properties in the model for this call: + % Optional properties in the model for this call: + % xproperties + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the PrincipalAssignment. + % 201: Successfully created the principalAssignment. + % 0: Error response describing why the operation failed. + % + % Returns: ClusterPrincipalAssignment + % + % See Also: adx.control.models.ClusterPrincipalAssignment + + arguments + obj adx.control.api.ClusterPrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + principalAssignmentName string + api_version string + ClusterPrincipalAssignment adx.control.models.ClusterPrincipalAssignment + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clusterPrincipalAssignmentsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clusterPrincipalAssignmentsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "xproperties",... + ]; + request.Body(1).Payload = ClusterPrincipalAssignment.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clusterPrincipalAssignmentsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clusterPrincipalAssignmentsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ClusterPrincipalAssignment(response.Body.Data); + case 201 + result = adx.control.models.ClusterPrincipalAssignment(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clusterPrincipalAssignmentsCreateOrUpdate method + + function [code, result, response] = clusterPrincipalAssignmentsDelete(obj, subscriptionId, resourceGroupName, clusterName, principalAssignmentName, api_version) + % clusterPrincipalAssignmentsDelete No summary provided + % Deletes a Kusto cluster principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK -- principalAssignments deleted successfully. + % 202: Accepted the delete principalAssignments request. + % 204: NoContent -- principalAssignments does not exist in the subscription. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.ClusterPrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + principalAssignmentName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clusterPrincipalAssignmentsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clusterPrincipalAssignmentsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clusterPrincipalAssignmentsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clusterPrincipalAssignmentsDelete method + + function [code, result, response] = clusterPrincipalAssignmentsGet(obj, subscriptionId, resourceGroupName, clusterName, principalAssignmentName, api_version) + % clusterPrincipalAssignmentsGet No summary provided + % Gets a Kusto cluster principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The Kusto cluster principal assignment object. + % 0: Error response describing why the operation failed. + % + % Returns: ClusterPrincipalAssignment + % + % See Also: adx.control.models.ClusterPrincipalAssignment + + arguments + obj adx.control.api.ClusterPrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + principalAssignmentName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clusterPrincipalAssignmentsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clusterPrincipalAssignmentsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clusterPrincipalAssignmentsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ClusterPrincipalAssignment(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clusterPrincipalAssignmentsGet method + + function [code, result, response] = clusterPrincipalAssignmentsList(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % clusterPrincipalAssignmentsList No summary provided + % Lists all Kusto cluster principalAssignments. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: ClusterPrincipalAssignmentListResult + % + % See Also: adx.control.models.ClusterPrincipalAssignmentListResult + + arguments + obj adx.control.api.ClusterPrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clusterPrincipalAssignmentsList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clusterPrincipalAssignmentsList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/principalAssignments"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clusterPrincipalAssignmentsList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clusterPrincipalAssignmentsList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ClusterPrincipalAssignmentListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clusterPrincipalAssignmentsList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/Clusters.m b/Software/MATLAB/app/system/+adx/+control/+api/Clusters.m new file mode 100644 index 0000000..ea30ac6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/Clusters.m @@ -0,0 +1,2117 @@ +classdef Clusters < adx.control.BaseClient + % Clusters No description provided + % + % Clusters Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % Clusters Methods: + % + % Clusters - Constructor + % clustersAddLanguageExtensions - + % clustersCheckNameAvailability - + % clustersCreateOrUpdate - + % clustersDelete - + % clustersDetachFollowerDatabases - + % clustersDiagnoseVirtualNetwork - + % clustersGet - + % clustersList - + % clustersListByResourceGroup - + % clustersListFollowerDatabases - + % clustersListLanguageExtensions - + % clustersListSkusByResource - + % clustersMigrate - + % clustersRemoveLanguageExtensions - + % clustersStart - + % clustersStop - + % clustersUpdate - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = Clusters(options) + % Clusters Constructor, creates a Clusters instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.Clusters(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.Clusters("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.Clusters("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.Clusters("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = clustersAddLanguageExtensions(obj, subscriptionId, resourceGroupName, clusterName, api_version, LanguageExtensionsList) + % clustersAddLanguageExtensions No summary provided + % Add a list of language extensions that can run within KQL queries. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % LanguageExtensionsList - The language extensions to add., Type: LanguageExtensionsList + % Required properties in the model for this call: + % Optional properties in the model for this call: + % value + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + subscriptionId string + resourceGroupName string + clusterName string + api_version string + LanguageExtensionsList adx.control.models.LanguageExtensionsList + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersAddLanguageExtensions:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersAddLanguageExtensions") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersAddLanguageExtensions:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersAddLanguageExtensions") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/addLanguageExtensions"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "value",... + ]; + request.Body(1).Payload = LanguageExtensionsList.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersAddLanguageExtensions", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersAddLanguageExtensions", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersAddLanguageExtensions method + + function [code, result, response] = clustersCheckNameAvailability(obj, api_version, subscriptionId, location, ClusterCheckNameRequest) + % clustersCheckNameAvailability No summary provided + % Checks that the cluster name is valid and is not already in use. + % + % Required parameters: + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % location - The name of Azure region., Type: string + % ClusterCheckNameRequest - The name of the cluster., Type: ClusterCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.Clusters + api_version string + subscriptionId string + location string + ClusterCheckNameRequest adx.control.models.ClusterCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/providers/Microsoft.Kusto/locations/{location}/checkNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "location" +"}") = location; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = ClusterCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersCheckNameAvailability method + + function [code, result, response] = clustersCreateOrUpdate(obj, resourceGroupName, clusterName, subscriptionId, api_version, Cluster, optionals) + % clustersCreateOrUpdate No summary provided + % Create or update a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % Cluster - The Kusto cluster parameters supplied to the CreateOrUpdate operation., Type: Cluster + % Required properties in the model for this call: + % sku + % Optional properties in the model for this call: + % systemData + % zones + % identity + % xproperties + % etag + % + % Optional name-value parameters: + % If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + % If_None_Match - Set to ''*'' to allow a new cluster to be created, but to prevent updating an existing cluster. Other values will result in a 412 Pre-condition Failed response., Type: string + % + % Responses: + % 200: Successfully updated the Cluster. + % 201: Successfully created the cluster. + % 0: Error response describing why the operation failed. + % + % Returns: Cluster + % + % See Also: adx.control.models.Cluster + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + Cluster adx.control.models.Cluster + optionals.If_Match string + optionals.If_None_Match string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersCreateOrUpdate") + end + + % Add header parameters + if isfield(optionals,"If_Match"), request.Header(end+1) = matlab.net.http.HeaderField('If-Match', optionals.If_Match); end + if isfield(optionals,"If_None_Match"), request.Header(end+1) = matlab.net.http.HeaderField('If-None-Match', optionals.If_None_Match); end + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "sku",... + ]; + optionalProperties = [... + "systemData",... + "zones",... + "identity",... + "xproperties",... + "etag",... + ]; + request.Body(1).Payload = Cluster.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Cluster(response.Body.Data); + case 201 + result = adx.control.models.Cluster(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersCreateOrUpdate method + + function [code, result, response] = clustersDelete(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersDelete No summary provided + % Deletes a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK -- cluster deleted successfully. + % 202: Accepted the delete cluster request. + % 204: NoContent -- cluster does not exist in the subscription. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersDelete method + + function [code, result, response] = clustersDetachFollowerDatabases(obj, resourceGroupName, clusterName, subscriptionId, api_version, FollowerDatabaseDefinition) + % clustersDetachFollowerDatabases No summary provided + % Detaches all followers of a database owned by this cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % FollowerDatabaseDefinition - The follower databases properties to remove., Type: FollowerDatabaseDefinition + % Required properties in the model for this call: + % clusterResourceId + % attachedDatabaseConfigurationName + % Optional properties in the model for this call: + % databaseName + % tableLevelSharingProperties + % databaseShareOrigin + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + FollowerDatabaseDefinition adx.control.models.FollowerDatabaseDefinition + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersDetachFollowerDatabases:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersDetachFollowerDatabases") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersDetachFollowerDatabases:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersDetachFollowerDatabases") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/detachFollowerDatabases"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "clusterResourceId",... + "attachedDatabaseConfigurationName",... + ]; + optionalProperties = [... + "databaseName",... + "tableLevelSharingProperties",... + "databaseShareOrigin",... + ]; + request.Body(1).Payload = FollowerDatabaseDefinition.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersDetachFollowerDatabases", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersDetachFollowerDatabases", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersDetachFollowerDatabases method + + function [code, result, response] = clustersDiagnoseVirtualNetwork(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersDiagnoseVirtualNetwork No summary provided + % Diagnoses network connectivity status for external resources on which the service is dependent on. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: DiagnoseVirtualNetworkResult + % + % See Also: adx.control.models.DiagnoseVirtualNetworkResult + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersDiagnoseVirtualNetwork:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersDiagnoseVirtualNetwork") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/diagnoseVirtualNetwork"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersDiagnoseVirtualNetwork", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersDiagnoseVirtualNetwork", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DiagnoseVirtualNetworkResult(response.Body.Data); + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersDiagnoseVirtualNetwork method + + function [code, result, response] = clustersGet(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersGet No summary provided + % Gets a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The Kusto cluster. + % 0: Error response describing why the operation failed. + % + % Returns: Cluster + % + % See Also: adx.control.models.Cluster + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Cluster(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersGet method + + function [code, result, response] = clustersList(obj, subscriptionId, api_version) + % clustersList No summary provided + % Lists all Kusto clusters within a subscription. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: ClusterListResult + % + % See Also: adx.control.models.ClusterListResult + + arguments + obj adx.control.api.Clusters + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/providers/Microsoft.Kusto/clusters"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ClusterListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersList method + + function [code, result, response] = clustersListByResourceGroup(obj, resourceGroupName, subscriptionId, api_version) + % clustersListByResourceGroup No summary provided + % Lists all Kusto clusters within a resource group. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: ClusterListResult + % + % See Also: adx.control.models.ClusterListResult + + arguments + obj adx.control.api.Clusters + resourceGroupName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListByResourceGroup:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListByResourceGroup") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListByResourceGroup", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListByResourceGroup", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ClusterListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListByResourceGroup method + + function [code, result, response] = clustersListFollowerDatabases(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersListFollowerDatabases No summary provided + % Returns a list of databases that are owned by this cluster and were followed by another cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the list of followed databases. + % 0: Error response describing why the operation failed. + % + % Returns: FollowerDatabaseListResult + % + % See Also: adx.control.models.FollowerDatabaseListResult + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListFollowerDatabases:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListFollowerDatabases") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/listFollowerDatabases"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListFollowerDatabases", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListFollowerDatabases", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.FollowerDatabaseListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListFollowerDatabases method + + function [code, result, response] = clustersListLanguageExtensions(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % clustersListLanguageExtensions No summary provided + % Returns a list of language extensions that can run within KQL queries. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the list of language extensions. + % 0: Error response describing why the operation failed. + % + % Returns: LanguageExtensionsList + % + % See Also: adx.control.models.LanguageExtensionsList + + arguments + obj adx.control.api.Clusters + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListLanguageExtensions:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListLanguageExtensions") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/listLanguageExtensions"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListLanguageExtensions", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListLanguageExtensions", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.LanguageExtensionsList(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListLanguageExtensions method + + function [code, result, response] = clustersListSkusByResource(obj, resourceGroupName, clusterName, api_version, subscriptionId) + % clustersListSkusByResource No summary provided + % Returns the SKUs available for the provided resource. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: ListResourceSkusResult + % + % See Also: adx.control.models.ListResourceSkusResult + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + api_version string + subscriptionId string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListSkusByResource:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListSkusByResource") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/skus"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListSkusByResource", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListSkusByResource", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ListResourceSkusResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListSkusByResource method + + function [code, result, response] = clustersMigrate(obj, resourceGroupName, clusterName, subscriptionId, api_version, ClusterMigrateRequest) + % clustersMigrate No summary provided + % Migrate data from a Kusto cluster to another cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % ClusterMigrateRequest - The cluster migrate request parameters., Type: ClusterMigrateRequest + % Required properties in the model for this call: + % clusterResourceId + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + ClusterMigrateRequest adx.control.models.ClusterMigrateRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersMigrate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersMigrate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersMigrate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersMigrate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/migrate"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "clusterResourceId",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = ClusterMigrateRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersMigrate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersMigrate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersMigrate method + + function [code, result, response] = clustersRemoveLanguageExtensions(obj, subscriptionId, resourceGroupName, clusterName, api_version, LanguageExtensionsList) + % clustersRemoveLanguageExtensions No summary provided + % Remove a list of language extensions that can run within KQL queries. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % LanguageExtensionsList - The language extensions to remove., Type: LanguageExtensionsList + % Required properties in the model for this call: + % Optional properties in the model for this call: + % value + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + subscriptionId string + resourceGroupName string + clusterName string + api_version string + LanguageExtensionsList adx.control.models.LanguageExtensionsList + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersRemoveLanguageExtensions:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersRemoveLanguageExtensions") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersRemoveLanguageExtensions:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersRemoveLanguageExtensions") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/removeLanguageExtensions"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "value",... + ]; + request.Body(1).Payload = LanguageExtensionsList.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersRemoveLanguageExtensions", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersRemoveLanguageExtensions", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersRemoveLanguageExtensions method + + function [code, result, response] = clustersStart(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersStart No summary provided + % Starts a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersStart:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersStart") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/start"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersStart", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersStart", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersStart method + + function [code, result, response] = clustersStop(obj, resourceGroupName, clusterName, subscriptionId, api_version) + % clustersStop No summary provided + % Stops a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersStop:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersStop") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/stop"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersStop", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersStop", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersStop method + + function [code, result, response] = clustersUpdate(obj, resourceGroupName, clusterName, subscriptionId, api_version, ClusterUpdate, optionals) + % clustersUpdate No summary provided + % Update a Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % ClusterUpdate - The Kusto cluster parameters supplied to the Update operation., Type: ClusterUpdate + % Required properties in the model for this call: + % Optional properties in the model for this call: + % tags + % location + % sku + % identity + % xproperties + % + % Optional name-value parameters: + % If_Match - The ETag of the cluster. Omit this value to always overwrite the current cluster. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes., Type: string + % + % Responses: + % 200: Successfully updated the Cluster. + % 201: Successfully updated the cluster. + % 202: Successfully updated the cluster. + % 0: Error response describing why the operation failed. + % + % Returns: Cluster + % + % See Also: adx.control.models.Cluster + + arguments + obj adx.control.api.Clusters + resourceGroupName string + clusterName string + subscriptionId string + api_version string + ClusterUpdate adx.control.models.ClusterUpdate + optionals.If_Match string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:clustersUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersUpdate") + end + + % Add header parameters + if isfield(optionals,"If_Match"), request.Header(end+1) = matlab.net.http.HeaderField('If-Match', optionals.If_Match); end + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PATCH'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "tags",... + "location",... + "sku",... + "identity",... + "xproperties",... + ]; + request.Body(1).Payload = ClusterUpdate.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Cluster(response.Body.Data); + case 201 + result = adx.control.models.Cluster(response.Body.Data); + case 202 + result = adx.control.models.Cluster(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersUpdate method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/DataConnections.m b/Software/MATLAB/app/system/+adx/+control/+api/DataConnections.m new file mode 100644 index 0000000..509770a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/DataConnections.m @@ -0,0 +1,1132 @@ +classdef DataConnections < adx.control.BaseClient + % DataConnections No description provided + % + % DataConnections Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % DataConnections Methods: + % + % DataConnections - Constructor + % dataConnectionsCheckNameAvailability - + % dataConnectionsCreateOrUpdate - + % dataConnectionsDataConnectionValidation - + % dataConnectionsDelete - + % dataConnectionsGet - + % dataConnectionsListByDatabase - + % dataConnectionsUpdate - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = DataConnections(options) + % DataConnections Constructor, creates a DataConnections instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.DataConnections(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.DataConnections("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.DataConnections("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.DataConnections("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = dataConnectionsCheckNameAvailability(obj, resourceGroupName, clusterName, databaseName, api_version, subscriptionId, DataConnectionCheckNameRequest) + % dataConnectionsCheckNameAvailability No summary provided + % Checks that the data connection name is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % DataConnectionCheckNameRequest - The name of the data connection., Type: DataConnectionCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the Kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + api_version string + subscriptionId string + DataConnectionCheckNameRequest adx.control.models.DataConnectionCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:dataConnectionsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/checkNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = DataConnectionCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsCheckNameAvailability method + + function [code, result, response] = dataConnectionsCreateOrUpdate(obj, resourceGroupName, clusterName, databaseName, dataConnectionName, subscriptionId, api_version, DataConnection) + % dataConnectionsCreateOrUpdate No summary provided + % Creates or updates a data connection. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % dataConnectionName - The name of the data connection., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % DataConnection - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnection + % Required properties in the model for this call: + % kind + % Optional properties in the model for this call: + % location + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the data connection. + % 201: Successfully created the data connection. + % 202: Accepted the create data connection request. + % 0: Error response describing why the operation failed. + % + % Returns: DataConnection + % + % See Also: adx.control.models.DataConnection + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + dataConnectionName string + subscriptionId string + api_version string + DataConnection adx.control.models.DataConnection + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:dataConnectionsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnections/{dataConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "dataConnectionName" +"}") = dataConnectionName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "kind",... + ]; + optionalProperties = [... + "location",... + ]; + request.Body(1).Payload = DataConnection.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + case 201 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + case 202 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsCreateOrUpdate method + + function [code, result, response] = dataConnectionsDataConnectionValidation(obj, resourceGroupName, clusterName, databaseName, api_version, subscriptionId, DataConnectionValidation) + % dataConnectionsDataConnectionValidation No summary provided + % Checks that the data connection parameters are valid. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % DataConnectionValidation - The data connection parameters supplied to the CreateOrUpdate operation., Type: DataConnectionValidation + % Required properties in the model for this call: + % Optional properties in the model for this call: + % dataConnectionName + % xproperties + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 202: Accepted + % 0: Error response describing why the operation failed. + % + % Returns: DataConnectionValidationListResult + % + % See Also: adx.control.models.DataConnectionValidationListResult + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + api_version string + subscriptionId string + DataConnectionValidation adx.control.models.DataConnectionValidation + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsDataConnectionValidation:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsDataConnectionValidation") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:dataConnectionsDataConnectionValidation:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsDataConnectionValidation") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnectionValidation"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "dataConnectionName",... + "xproperties",... + ]; + request.Body(1).Payload = DataConnectionValidation.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsDataConnectionValidation", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsDataConnectionValidation", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DataConnectionValidationListResult(response.Body.Data); + case 202 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsDataConnectionValidation method + + function [code, result, response] = dataConnectionsDelete(obj, resourceGroupName, clusterName, databaseName, dataConnectionName, subscriptionId, api_version) + % dataConnectionsDelete No summary provided + % Deletes the data connection with the given name. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % dataConnectionName - The name of the data connection., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully deleted the data connection. + % 202: Accepted. + % 204: The specified data connection does not exist. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + dataConnectionName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnections/{dataConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "dataConnectionName" +"}") = dataConnectionName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsDelete method + + function [code, result, response] = dataConnectionsGet(obj, resourceGroupName, clusterName, databaseName, dataConnectionName, subscriptionId, api_version) + % dataConnectionsGet No summary provided + % Returns a data connection. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % dataConnectionName - The name of the data connection., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the specified data connection. + % 0: Error response describing why the operation failed. + % + % Returns: DataConnection + % + % See Also: adx.control.models.DataConnection + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + dataConnectionName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnections/{dataConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "dataConnectionName" +"}") = dataConnectionName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsGet method + + function [code, result, response] = dataConnectionsListByDatabase(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version) + % dataConnectionsListByDatabase No summary provided + % Returns the list of data connections of the given Kusto database. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the list of data connections. + % 0: Error response describing why the operation failed. + % + % Returns: DataConnectionListResult + % + % See Also: adx.control.models.DataConnectionListResult + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsListByDatabase:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsListByDatabase") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnections"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsListByDatabase", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsListByDatabase", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DataConnectionListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsListByDatabase method + + function [code, result, response] = dataConnectionsUpdate(obj, resourceGroupName, clusterName, databaseName, dataConnectionName, subscriptionId, api_version, DataConnection) + % dataConnectionsUpdate No summary provided + % Updates a data connection. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % dataConnectionName - The name of the data connection., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % DataConnection - The data connection parameters supplied to the Update operation., Type: DataConnection + % Required properties in the model for this call: + % kind + % Optional properties in the model for this call: + % location + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the data connection. + % 201: Successfully updated the data connection. + % 202: Accepted the update data connection request. + % 0: Error response describing why the operation failed. + % + % Returns: DataConnection + % + % See Also: adx.control.models.DataConnection + + arguments + obj adx.control.api.DataConnections + resourceGroupName string + clusterName string + databaseName string + dataConnectionName string + subscriptionId string + api_version string + DataConnection adx.control.models.DataConnection + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:dataConnectionsUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:dataConnectionsUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","dataConnectionsUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PATCH'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/dataConnections/{dataConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "dataConnectionName" +"}") = dataConnectionName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "kind",... + ]; + optionalProperties = [... + "location",... + ]; + request.Body(1).Payload = DataConnection.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("dataConnectionsUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("dataConnectionsUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + case 201 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + case 202 + result = adx.control.models.DataConnection(response.Body.Data); + if startsWith("CosmosDbDataConnection",string(result.kind)) + result = adx.control.models.CosmosDbDataConnection(response.Body.Data); + return + end + + if startsWith("EventGridDataConnection",string(result.kind)) + result = adx.control.models.EventGridDataConnection(response.Body.Data); + return + end + + if startsWith("EventHubDataConnection",string(result.kind)) + result = adx.control.models.EventHubDataConnection(response.Body.Data); + return + end + + if startsWith("IotHubDataConnection",string(result.kind)) + result = adx.control.models.IotHubDataConnection(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % dataConnectionsUpdate method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/DatabasePrincipalAssignments.m b/Software/MATLAB/app/system/+adx/+control/+api/DatabasePrincipalAssignments.m new file mode 100644 index 0000000..d596fa1 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/DatabasePrincipalAssignments.m @@ -0,0 +1,709 @@ +classdef DatabasePrincipalAssignments < adx.control.BaseClient + % DatabasePrincipalAssignments No description provided + % + % DatabasePrincipalAssignments Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % DatabasePrincipalAssignments Methods: + % + % DatabasePrincipalAssignments - Constructor + % databasePrincipalAssignmentsCheckNameAvailability - + % databasePrincipalAssignmentsCreateOrUpdate - + % databasePrincipalAssignmentsDelete - + % databasePrincipalAssignmentsGet - + % databasePrincipalAssignmentsList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = DatabasePrincipalAssignments(options) + % DatabasePrincipalAssignments Constructor, creates a DatabasePrincipalAssignments instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.DatabasePrincipalAssignments(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.DatabasePrincipalAssignments("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.DatabasePrincipalAssignments("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.DatabasePrincipalAssignments("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = databasePrincipalAssignmentsCheckNameAvailability(obj, resourceGroupName, clusterName, databaseName, api_version, subscriptionId, DatabasePrincipalAssignmentCheckNameRequest) + % databasePrincipalAssignmentsCheckNameAvailability No summary provided + % Checks that the database principal assignment is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % DatabasePrincipalAssignmentCheckNameRequest - The name of the resource., Type: DatabasePrincipalAssignmentCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.DatabasePrincipalAssignments + resourceGroupName string + clusterName string + databaseName string + api_version string + subscriptionId string + DatabasePrincipalAssignmentCheckNameRequest adx.control.models.DatabasePrincipalAssignmentCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasePrincipalAssignmentsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasePrincipalAssignmentsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/checkPrincipalAssignmentNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = DatabasePrincipalAssignmentCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasePrincipalAssignmentsCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasePrincipalAssignmentsCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasePrincipalAssignmentsCheckNameAvailability method + + function [code, result, response] = databasePrincipalAssignmentsCreateOrUpdate(obj, subscriptionId, resourceGroupName, clusterName, databaseName, principalAssignmentName, api_version, DatabasePrincipalAssignment) + % databasePrincipalAssignmentsCreateOrUpdate No summary provided + % Creates a Kusto cluster database principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % DatabasePrincipalAssignment - The Kusto principalAssignments parameters supplied for the operation., Type: DatabasePrincipalAssignment + % Required properties in the model for this call: + % Optional properties in the model for this call: + % xproperties + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the PrincipalAssignments. + % 201: Successfully created the principalAssignments. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalAssignment + % + % See Also: adx.control.models.DatabasePrincipalAssignment + + arguments + obj adx.control.api.DatabasePrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + principalAssignmentName string + api_version string + DatabasePrincipalAssignment adx.control.models.DatabasePrincipalAssignment + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasePrincipalAssignmentsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasePrincipalAssignmentsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "xproperties",... + ]; + request.Body(1).Payload = DatabasePrincipalAssignment.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasePrincipalAssignmentsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasePrincipalAssignmentsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalAssignment(response.Body.Data); + case 201 + result = adx.control.models.DatabasePrincipalAssignment(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasePrincipalAssignmentsCreateOrUpdate method + + function [code, result, response] = databasePrincipalAssignmentsDelete(obj, subscriptionId, resourceGroupName, clusterName, databaseName, principalAssignmentName, api_version) + % databasePrincipalAssignmentsDelete No summary provided + % Deletes a Kusto principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK -- principalAssignments deleted successfully. + % 202: Accepted the delete principalAssignments request. + % 204: NoContent -- principalAssignments does not exist in the subscription. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.DatabasePrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + principalAssignmentName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasePrincipalAssignmentsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasePrincipalAssignmentsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasePrincipalAssignmentsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasePrincipalAssignmentsDelete method + + function [code, result, response] = databasePrincipalAssignmentsGet(obj, subscriptionId, resourceGroupName, clusterName, databaseName, principalAssignmentName, api_version) + % databasePrincipalAssignmentsGet No summary provided + % Gets a Kusto cluster database principalAssignment. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % principalAssignmentName - The name of the Kusto principalAssignment., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The Kusto cluster database principal assignment object. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalAssignment + % + % See Also: adx.control.models.DatabasePrincipalAssignment + + arguments + obj adx.control.api.DatabasePrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + principalAssignmentName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasePrincipalAssignmentsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/principalAssignments/{principalAssignmentName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "principalAssignmentName" +"}") = principalAssignmentName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasePrincipalAssignmentsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasePrincipalAssignmentsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalAssignment(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasePrincipalAssignmentsGet method + + function [code, result, response] = databasePrincipalAssignmentsList(obj, subscriptionId, resourceGroupName, clusterName, databaseName, api_version) + % databasePrincipalAssignmentsList No summary provided + % Lists all Kusto cluster database principalAssignments. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalAssignmentListResult + % + % See Also: adx.control.models.DatabasePrincipalAssignmentListResult + + arguments + obj adx.control.api.DatabasePrincipalAssignments + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasePrincipalAssignmentsList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasePrincipalAssignmentsList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/principalAssignments"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasePrincipalAssignmentsList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasePrincipalAssignmentsList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalAssignmentListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasePrincipalAssignmentsList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/Databases.m b/Software/MATLAB/app/system/+adx/+control/+api/Databases.m new file mode 100644 index 0000000..5277803 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/Databases.m @@ -0,0 +1,1424 @@ +classdef Databases < adx.control.BaseClient + % Databases No description provided + % + % Databases Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % Databases Methods: + % + % Databases - Constructor + % databaseInviteFollower - + % databasesAddPrincipals - + % databasesCheckNameAvailability - + % databasesCreateOrUpdate - + % databasesDelete - + % databasesGet - + % databasesListByCluster - + % databasesListPrincipals - + % databasesRemovePrincipals - + % databasesUpdate - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = Databases(options) + % Databases Constructor, creates a Databases instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.Databases(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.Databases("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.Databases("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.Databases("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = databaseInviteFollower(obj, subscriptionId, resourceGroupName, clusterName, databaseName, api_version, DatabaseInviteFollowerRequest) + % databaseInviteFollower No summary provided + % Generates an invitation token that allows attaching a follower database to this database. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % DatabaseInviteFollowerRequest - The follower invitation request parameters., Type: DatabaseInviteFollowerRequest + % Required properties in the model for this call: + % inviteeEmail + % Optional properties in the model for this call: + % tableLevelSharingProperties + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: DatabaseInviteFollowerResult + % + % See Also: adx.control.models.DatabaseInviteFollowerResult + + arguments + obj adx.control.api.Databases + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + api_version string + DatabaseInviteFollowerRequest adx.control.models.DatabaseInviteFollowerRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databaseInviteFollower:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databaseInviteFollower") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databaseInviteFollower:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databaseInviteFollower") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/inviteFollower"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "inviteeEmail",... + ]; + optionalProperties = [... + "tableLevelSharingProperties",... + ]; + request.Body(1).Payload = DatabaseInviteFollowerRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databaseInviteFollower", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databaseInviteFollower", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabaseInviteFollowerResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databaseInviteFollower method + + function [code, result, response] = databasesAddPrincipals(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version, DatabasePrincipalListRequest) + % databasesAddPrincipals No summary provided + % Add Database principals permissions. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % DatabasePrincipalListRequest - List of database principals to add., Type: DatabasePrincipalListRequest + % Required properties in the model for this call: + % Optional properties in the model for this call: + % value + % + % No optional parameters + % + % Responses: + % 200: OK -- Successfully added the list of database principals. Returns the updated list of principals. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalListResult + % + % See Also: adx.control.models.DatabasePrincipalListResult + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + DatabasePrincipalListRequest adx.control.models.DatabasePrincipalListRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesAddPrincipals:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesAddPrincipals") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasesAddPrincipals:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesAddPrincipals") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/addPrincipals"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "value",... + ]; + request.Body(1).Payload = DatabasePrincipalListRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesAddPrincipals", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesAddPrincipals", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesAddPrincipals method + + function [code, result, response] = databasesCheckNameAvailability(obj, resourceGroupName, clusterName, api_version, subscriptionId, CheckNameRequest) + % databasesCheckNameAvailability No summary provided + % Checks that the databases resource name is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % CheckNameRequest - The name of the resource., Type: CheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + api_version string + subscriptionId string + CheckNameRequest adx.control.models.CheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasesCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/checkNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = CheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesCheckNameAvailability method + + function [code, result, response] = databasesCreateOrUpdate(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version, Database, optionals) + % databasesCreateOrUpdate No summary provided + % Creates or updates a database. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % Database - The database parameters supplied to the CreateOrUpdate operation., Type: Database + % Required properties in the model for this call: + % kind + % Optional properties in the model for this call: + % location + % + % Optional name-value parameters: + % callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + % + % Responses: + % 200: Successfully updated the database. + % 201: Successfully created the database. + % 202: Accepted the create database request. + % 0: Error response describing why the operation failed. + % + % Returns: Database + % + % See Also: adx.control.models.Database + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + Database adx.control.models.Database + optionals.callerRole string { mustBeMember(optionals.callerRole,["Admin","None"]) } + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasesCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + if isfield(optionals, "callerRole"), uri.Query(end+1) = matlab.net.QueryParameter("callerRole", optionals.callerRole); end + + % Set JSON Body + requiredProperties = [... + "kind",... + ]; + optionalProperties = [... + "location",... + ]; + request.Body(1).Payload = Database.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + case 201 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + case 202 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesCreateOrUpdate method + + function [code, result, response] = databasesDelete(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version) + % databasesDelete No summary provided + % Deletes the database with the given name. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully deleted the database. + % 202: Accepted. + % 204: The specified database does not exist. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesDelete method + + function [code, result, response] = databasesGet(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version) + % databasesGet No summary provided + % Returns a database. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the specified database. + % 0: Error response describing why the operation failed. + % + % Returns: Database + % + % See Also: adx.control.models.Database + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesGet method + + function [code, result, response] = databasesListByCluster(obj, resourceGroupName, clusterName, subscriptionId, api_version, optionals) + % databasesListByCluster No summary provided + % Returns the list of databases of the given Kusto cluster. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % Optional name-value parameters: + % top - limit the number of results, Type: int32, Format: int32 + % skiptoken - Skiptoken is only used if a previous operation returned a partial result. If a previous response contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that specifies a starting point to use for subsequent calls., Type: string + % + % Responses: + % 200: Successfully retrieved the list of databases. + % 0: Error response describing why the operation failed. + % + % Returns: DatabaseListResult + % + % See Also: adx.control.models.DatabaseListResult + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + subscriptionId string + api_version string + optionals.top int32 + optionals.skiptoken string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesListByCluster:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesListByCluster") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + if isfield(optionals, "top"), uri.Query(end+1) = matlab.net.QueryParameter("$top", optionals.top); end + if isfield(optionals, "skiptoken"), uri.Query(end+1) = matlab.net.QueryParameter("$skiptoken", optionals.skiptoken); end + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesListByCluster", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesListByCluster", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabaseListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesListByCluster method + + function [code, result, response] = databasesListPrincipals(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version) + % databasesListPrincipals No summary provided + % Returns a list of database principals of the given Kusto cluster and database. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the list of database principals. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalListResult + % + % See Also: adx.control.models.DatabasePrincipalListResult + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesListPrincipals:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesListPrincipals") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/listPrincipals"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesListPrincipals", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesListPrincipals", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesListPrincipals method + + function [code, result, response] = databasesRemovePrincipals(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version, DatabasePrincipalListRequest) + % databasesRemovePrincipals No summary provided + % Remove Database principals permissions. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % DatabasePrincipalListRequest - List of database principals to remove., Type: DatabasePrincipalListRequest + % Required properties in the model for this call: + % Optional properties in the model for this call: + % value + % + % No optional parameters + % + % Responses: + % 200: OK -- Successfully removed the list of database principals. Returns the updated list of principals. + % 0: Error response describing why the operation failed. + % + % Returns: DatabasePrincipalListResult + % + % See Also: adx.control.models.DatabasePrincipalListResult + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + DatabasePrincipalListRequest adx.control.models.DatabasePrincipalListRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesRemovePrincipals:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesRemovePrincipals") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasesRemovePrincipals:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesRemovePrincipals") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/removePrincipals"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "value",... + ]; + request.Body(1).Payload = DatabasePrincipalListRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesRemovePrincipals", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesRemovePrincipals", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.DatabasePrincipalListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesRemovePrincipals method + + function [code, result, response] = databasesUpdate(obj, resourceGroupName, clusterName, databaseName, subscriptionId, api_version, Database, optionals) + % databasesUpdate No summary provided + % Updates a database. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % api_version - The API version to use for this operation., Type: string + % Database - The database parameters supplied to the Update operation., Type: Database + % Required properties in the model for this call: + % kind + % Optional properties in the model for this call: + % location + % + % Optional name-value parameters: + % callerRole - By default, any user who run operation on a database become an Admin on it. This property allows the caller to exclude the caller from Admins list., Type: string + % + % Responses: + % 200: Successfully updated the database. + % 201: Successfully updated the database. + % 202: Accepted the update database request. + % 0: Error response describing why the operation failed. + % + % Returns: Database + % + % See Also: adx.control.models.Database + + arguments + obj adx.control.api.Databases + resourceGroupName string + clusterName string + databaseName string + subscriptionId string + api_version string + Database adx.control.models.Database + optionals.callerRole string { mustBeMember(optionals.callerRole,["Admin","None"]) } + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:databasesUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:databasesUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","databasesUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PATCH'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + if isfield(optionals, "callerRole"), uri.Query(end+1) = matlab.net.QueryParameter("callerRole", optionals.callerRole); end + + % Set JSON Body + requiredProperties = [... + "kind",... + ]; + optionalProperties = [... + "location",... + ]; + request.Body(1).Payload = Database.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("databasesUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("databasesUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + case 201 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + case 202 + result = adx.control.models.Database(response.Body.Data); + if startsWith("ReadOnlyFollowingDatabase",string(result.kind)) + result = adx.control.models.ReadOnlyFollowingDatabase(response.Body.Data); + return + end + + if startsWith("ReadWriteDatabase",string(result.kind)) + result = adx.control.models.ReadWriteDatabase(response.Body.Data); + return + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % databasesUpdate method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/Default.m b/Software/MATLAB/app/system/+adx/+control/+api/Default.m new file mode 100644 index 0000000..245bf33 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/Default.m @@ -0,0 +1,303 @@ +classdef Default < adx.control.BaseClient + % Default No description provided + % + % Default Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % Default Methods: + % + % Default - Constructor + % clustersListSkus - + % skusList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = Default(options) + % Default Constructor, creates a Default instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.Default(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.Default("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.Default("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.Default("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = clustersListSkus(obj, api_version, subscriptionId) + % clustersListSkus No summary provided + % Lists eligible SKUs for Kusto resource provider. + % + % Required parameters: + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: SkuDescriptionList + % + % See Also: adx.control.models.SkuDescriptionList + + arguments + obj adx.control.api.Default + api_version string + subscriptionId string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListSkus:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListSkus") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/providers/Microsoft.Kusto/skus"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListSkus", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListSkus", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.SkuDescriptionList(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListSkus method + + function [code, result, response] = skusList(obj, api_version, subscriptionId, location) + % skusList No summary provided + % Lists eligible region SKUs for Kusto resource provider by Azure region. + % + % Required parameters: + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % location - The name of Azure region., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK. + % 0: Error response describing why the operation failed. + % + % Returns: SkuDescriptionList + % + % See Also: adx.control.models.SkuDescriptionList + + arguments + obj adx.control.api.Default + api_version string + subscriptionId string + location string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:skusList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","skusList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/providers/Microsoft.Kusto/locations/{location}/skus"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "location" +"}") = location; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("skusList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("skusList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.SkuDescriptionList(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % skusList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/ManagedPrivateEndpoints.m b/Software/MATLAB/app/system/+adx/+control/+api/ManagedPrivateEndpoints.m new file mode 100644 index 0000000..55ad04c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/ManagedPrivateEndpoints.m @@ -0,0 +1,835 @@ +classdef ManagedPrivateEndpoints < adx.control.BaseClient + % ManagedPrivateEndpoints No description provided + % + % ManagedPrivateEndpoints Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % ManagedPrivateEndpoints Methods: + % + % ManagedPrivateEndpoints - Constructor + % managedPrivateEndpointsCheckNameAvailability - + % managedPrivateEndpointsCreateOrUpdate - + % managedPrivateEndpointsDelete - + % managedPrivateEndpointsGet - + % managedPrivateEndpointsList - + % managedPrivateEndpointsUpdate - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = ManagedPrivateEndpoints(options) + % ManagedPrivateEndpoints Constructor, creates a ManagedPrivateEndpoints instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.ManagedPrivateEndpoints(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.ManagedPrivateEndpoints("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.ManagedPrivateEndpoints("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.ManagedPrivateEndpoints("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = managedPrivateEndpointsCheckNameAvailability(obj, resourceGroupName, clusterName, api_version, subscriptionId, ManagedPrivateEndpointsCheckNameRequest) + % managedPrivateEndpointsCheckNameAvailability No summary provided + % Checks that the managed private endpoints resource name is valid and is not already in use. + % + % Required parameters: + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % subscriptionId - The ID of the target subscription., Type: string + % ManagedPrivateEndpointsCheckNameRequest - The name of the resource., Type: ManagedPrivateEndpointsCheckNameRequest + % Required properties in the model for this call: + % name + % type + % Optional properties in the model for this call: + % + % No optional parameters + % + % Responses: + % 200: OK -- Operation to check the kusto resource name availability was successful. + % 0: Error response describing why the operation failed. + % + % Returns: CheckNameResult + % + % See Also: adx.control.models.CheckNameResult + + arguments + obj adx.control.api.ManagedPrivateEndpoints + resourceGroupName string + clusterName string + api_version string + subscriptionId string + ManagedPrivateEndpointsCheckNameRequest adx.control.models.ManagedPrivateEndpointsCheckNameRequest + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsCheckNameAvailability") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:managedPrivateEndpointsCheckNameAvailability:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsCheckNameAvailability") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpointsCheckNameAvailability"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + "name",... + "type",... + ]; + optionalProperties = [... + ]; + request.Body(1).Payload = ManagedPrivateEndpointsCheckNameRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsCheckNameAvailability", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsCheckNameAvailability", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.CheckNameResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsCheckNameAvailability method + + function [code, result, response] = managedPrivateEndpointsCreateOrUpdate(obj, subscriptionId, resourceGroupName, clusterName, managedPrivateEndpointName, api_version, ManagedPrivateEndpoint) + % managedPrivateEndpointsCreateOrUpdate No summary provided + % Creates a managed private endpoint. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % managedPrivateEndpointName - The name of the managed private endpoint., Type: string + % api_version - The API version to use for this operation., Type: string + % ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + % Required properties in the model for this call: + % Optional properties in the model for this call: + % xproperties + % systemData + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the managed private endpoint. + % 201: Successfully created the managed private endpoint. + % 202: Successfully accepted the managed private endpoint. + % 0: Error response describing why the operation failed. + % + % Returns: ManagedPrivateEndpoint + % + % See Also: adx.control.models.ManagedPrivateEndpoint + + arguments + obj adx.control.api.ManagedPrivateEndpoints + subscriptionId string + resourceGroupName string + clusterName string + managedPrivateEndpointName string + api_version string + ManagedPrivateEndpoint adx.control.models.ManagedPrivateEndpoint + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:managedPrivateEndpointsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpoints/{managedPrivateEndpointName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "managedPrivateEndpointName" +"}") = managedPrivateEndpointName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "xproperties",... + "systemData",... + ]; + request.Body(1).Payload = ManagedPrivateEndpoint.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + case 201 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + case 202 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsCreateOrUpdate method + + function [code, result, response] = managedPrivateEndpointsDelete(obj, subscriptionId, resourceGroupName, clusterName, managedPrivateEndpointName, api_version) + % managedPrivateEndpointsDelete No summary provided + % Deletes a managed private endpoint. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % managedPrivateEndpointName - The name of the managed private endpoint., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK -- managed private endpoint deleted successfully. + % 202: Accepted the delete managed private endpoint request. + % 204: NoContent -- If the managed private endpoint resource is already deleted, this is the expected status code. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.ManagedPrivateEndpoints + subscriptionId string + resourceGroupName string + clusterName string + managedPrivateEndpointName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpoints/{managedPrivateEndpointName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "managedPrivateEndpointName" +"}") = managedPrivateEndpointName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsDelete method + + function [code, result, response] = managedPrivateEndpointsGet(obj, subscriptionId, resourceGroupName, clusterName, managedPrivateEndpointName, api_version) + % managedPrivateEndpointsGet No summary provided + % Gets a managed private endpoint. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % managedPrivateEndpointName - The name of the managed private endpoint., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The managed private endpoint object. + % 0: Error response describing why the operation failed. + % + % Returns: ManagedPrivateEndpoint + % + % See Also: adx.control.models.ManagedPrivateEndpoint + + arguments + obj adx.control.api.ManagedPrivateEndpoints + subscriptionId string + resourceGroupName string + clusterName string + managedPrivateEndpointName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpoints/{managedPrivateEndpointName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "managedPrivateEndpointName" +"}") = managedPrivateEndpointName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsGet method + + function [code, result, response] = managedPrivateEndpointsList(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % managedPrivateEndpointsList No summary provided + % Returns the list of managed private endpoints. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The list result of managed private endpoints. + % 0: Error response describing why the operation failed. + % + % Returns: ManagedPrivateEndpointListResult + % + % See Also: adx.control.models.ManagedPrivateEndpointListResult + + arguments + obj adx.control.api.ManagedPrivateEndpoints + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpoints"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ManagedPrivateEndpointListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsList method + + function [code, result, response] = managedPrivateEndpointsUpdate(obj, subscriptionId, resourceGroupName, clusterName, managedPrivateEndpointName, api_version, ManagedPrivateEndpoint) + % managedPrivateEndpointsUpdate No summary provided + % Updates a managed private endpoint. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % managedPrivateEndpointName - The name of the managed private endpoint., Type: string + % api_version - The API version to use for this operation., Type: string + % ManagedPrivateEndpoint - The managed private endpoint parameters., Type: ManagedPrivateEndpoint + % Required properties in the model for this call: + % Optional properties in the model for this call: + % xproperties + % systemData + % + % No optional parameters + % + % Responses: + % 200: Successfully updated the managed private endpoint. + % 202: Accepted the update request of the managed private endpoint. + % 0: Error response describing why the operation failed. + % + % Returns: ManagedPrivateEndpoint + % + % See Also: adx.control.models.ManagedPrivateEndpoint + + arguments + obj adx.control.api.ManagedPrivateEndpoints + subscriptionId string + resourceGroupName string + clusterName string + managedPrivateEndpointName string + api_version string + ManagedPrivateEndpoint adx.control.models.ManagedPrivateEndpoint + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:managedPrivateEndpointsUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:managedPrivateEndpointsUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","managedPrivateEndpointsUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PATCH'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/managedPrivateEndpoints/{managedPrivateEndpointName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "managedPrivateEndpointName" +"}") = managedPrivateEndpointName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "xproperties",... + "systemData",... + ]; + request.Body(1).Payload = ManagedPrivateEndpoint.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managedPrivateEndpointsUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managedPrivateEndpointsUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + case 202 + result = adx.control.models.ManagedPrivateEndpoint(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % managedPrivateEndpointsUpdate method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/OperationResults.m b/Software/MATLAB/app/system/+adx/+control/+api/OperationResults.m new file mode 100644 index 0000000..76bfde9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/OperationResults.m @@ -0,0 +1,206 @@ +classdef OperationResults < adx.control.BaseClient + % OperationResults No description provided + % + % OperationResults Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % OperationResults Methods: + % + % OperationResults - Constructor + % operationsResultsGet - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = OperationResults(options) + % OperationResults Constructor, creates a OperationResults instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.OperationResults(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.OperationResults("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.OperationResults("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.OperationResults("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = operationsResultsGet(obj, subscriptionId, location, operationId, api_version) + % operationsResultsGet No summary provided + % Returns operation results. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % location - The name of Azure region., Type: string + % operationId - The ID of an ongoing async operation., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved the operation result. + % 0: Error response describing why the operation failed. + % + % Returns: OperationResult + % + % See Also: adx.control.models.OperationResult + + arguments + obj adx.control.api.OperationResults + subscriptionId string + location string + operationId string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:operationsResultsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","operationsResultsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/providers/Microsoft.Kusto/locations/{location}/operationResults/{operationId}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "location" +"}") = location; + uri.Path(uri.Path == "{" + "operationId" +"}") = operationId; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("operationsResultsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("operationsResultsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.OperationResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % operationsResultsGet method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/Operations.m b/Software/MATLAB/app/system/+adx/+control/+api/Operations.m new file mode 100644 index 0000000..d63f759 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/Operations.m @@ -0,0 +1,197 @@ +classdef Operations < adx.control.BaseClient + % Operations No description provided + % + % Operations Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % Operations Methods: + % + % Operations - Constructor + % operationsList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = Operations(options) + % Operations Constructor, creates a Operations instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.Operations(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.Operations("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.Operations("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.Operations("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = operationsList(obj, api_version) + % operationsList No summary provided + % Lists available operations for the Microsoft.Kusto provider. + % + % Required parameters: + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The operation was successful. The response contains the list of available operations. + % 0: Error response describing why the operation failed. + % + % Returns: OperationListResult + % + % See Also: adx.control.models.OperationListResult + + arguments + obj adx.control.api.Operations + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:operationsList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","operationsList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/providers/Microsoft.Kusto/operations"; + + % No path parameters + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("operationsList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("operationsList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.OperationListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % operationsList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/OutboundNetworkDependenciesEndpoints.m b/Software/MATLAB/app/system/+adx/+control/+api/OutboundNetworkDependenciesEndpoints.m new file mode 100644 index 0000000..f79d3c2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/OutboundNetworkDependenciesEndpoints.m @@ -0,0 +1,206 @@ +classdef OutboundNetworkDependenciesEndpoints < adx.control.BaseClient + % OutboundNetworkDependenciesEndpoints No description provided + % + % OutboundNetworkDependenciesEndpoints Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % OutboundNetworkDependenciesEndpoints Methods: + % + % OutboundNetworkDependenciesEndpoints - Constructor + % clustersListOutboundNetworkDependenciesEndpoints - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = OutboundNetworkDependenciesEndpoints(options) + % OutboundNetworkDependenciesEndpoints Constructor, creates a OutboundNetworkDependenciesEndpoints instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.OutboundNetworkDependenciesEndpoints(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.OutboundNetworkDependenciesEndpoints("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.OutboundNetworkDependenciesEndpoints("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.OutboundNetworkDependenciesEndpoints("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = clustersListOutboundNetworkDependenciesEndpoints(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % clustersListOutboundNetworkDependenciesEndpoints No summary provided + % Gets the network endpoints of all outbound dependencies of a Kusto cluster + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: OK + % 0: Error from the RP + % + % Returns: OutboundNetworkDependenciesEndpointListResult + % + % See Also: adx.control.models.OutboundNetworkDependenciesEndpointListResult + + arguments + obj adx.control.api.OutboundNetworkDependenciesEndpoints + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:clustersListOutboundNetworkDependenciesEndpoints:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","clustersListOutboundNetworkDependenciesEndpoints") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/outboundNetworkDependenciesEndpoints"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("clustersListOutboundNetworkDependenciesEndpoints", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("clustersListOutboundNetworkDependenciesEndpoints", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.OutboundNetworkDependenciesEndpointListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % clustersListOutboundNetworkDependenciesEndpoints method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/PrivateEndpointConnections.m b/Software/MATLAB/app/system/+adx/+control/+api/PrivateEndpointConnections.m new file mode 100644 index 0000000..a17b819 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/PrivateEndpointConnections.m @@ -0,0 +1,566 @@ +classdef PrivateEndpointConnections < adx.control.BaseClient + % PrivateEndpointConnections No description provided + % + % PrivateEndpointConnections Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % PrivateEndpointConnections Methods: + % + % PrivateEndpointConnections - Constructor + % privateEndpointConnectionsCreateOrUpdate - + % privateEndpointConnectionsDelete - + % privateEndpointConnectionsGet - + % privateEndpointConnectionsList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = PrivateEndpointConnections(options) + % PrivateEndpointConnections Constructor, creates a PrivateEndpointConnections instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.PrivateEndpointConnections(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.PrivateEndpointConnections("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.PrivateEndpointConnections("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.PrivateEndpointConnections("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = privateEndpointConnectionsCreateOrUpdate(obj, subscriptionId, resourceGroupName, clusterName, privateEndpointConnectionName, api_version, PrivateEndpointConnection) + % privateEndpointConnectionsCreateOrUpdate No summary provided + % Approve or reject a private endpoint connection with a given name. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % privateEndpointConnectionName - The name of the private endpoint connection., Type: string + % api_version - The API version to use for this operation., Type: string + % PrivateEndpointConnection - No description provided, Type: PrivateEndpointConnection + % Required properties in the model for this call: + % Optional properties in the model for this call: + % xproperties + % systemData + % + % No optional parameters + % + % Responses: + % 200: Successfully approved or rejected private endpoint connection. + % 201: Accepted. The private endpoint connection update will complete asynchronously. + % 0: Error response describing why the operation failed. + % + % Returns: PrivateEndpointConnection + % + % See Also: adx.control.models.PrivateEndpointConnection + + arguments + obj adx.control.api.PrivateEndpointConnections + subscriptionId string + resourceGroupName string + clusterName string + privateEndpointConnectionName string + api_version string + PrivateEndpointConnection adx.control.models.PrivateEndpointConnection + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateEndpointConnectionsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateEndpointConnectionsCreateOrUpdate") + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("control:api:privateEndpointConnectionsCreateOrUpdate:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateEndpointConnectionsCreateOrUpdate") + end + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('PUT'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateEndpointConnections/{privateEndpointConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "privateEndpointConnectionName" +"}") = privateEndpointConnectionName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % Set JSON Body + requiredProperties = [... + ]; + optionalProperties = [... + "xproperties",... + "systemData",... + ]; + request.Body(1).Payload = PrivateEndpointConnection.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateEndpointConnectionsCreateOrUpdate", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateEndpointConnectionsCreateOrUpdate", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.PrivateEndpointConnection(response.Body.Data); + case 201 + result = adx.control.models.PrivateEndpointConnection(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateEndpointConnectionsCreateOrUpdate method + + function [code, result, response] = privateEndpointConnectionsDelete(obj, subscriptionId, resourceGroupName, clusterName, privateEndpointConnectionName, api_version) + % privateEndpointConnectionsDelete No summary provided + % Deletes a private endpoint connection with a given name. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % privateEndpointConnectionName - The name of the private endpoint connection., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully deleted the private endpoint connection. + % 202: Accepted. The private endpoint connection delete will complete asynchronously. + % 204: Private endpoint connection does not exist. + % 0: Error response describing why the operation failed. + % + % Returns: + % + % See Also: adx.control.models. + + arguments + obj adx.control.api.PrivateEndpointConnections + subscriptionId string + resourceGroupName string + clusterName string + privateEndpointConnectionName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateEndpointConnectionsDelete:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateEndpointConnectionsDelete") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('DELETE'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateEndpointConnections/{privateEndpointConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "privateEndpointConnectionName" +"}") = privateEndpointConnectionName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateEndpointConnectionsDelete", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateEndpointConnectionsDelete", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = response.Body.Data; + case 202 + result = response.Body.Data; + case 204 + result = response.Body.Data; + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateEndpointConnectionsDelete method + + function [code, result, response] = privateEndpointConnectionsGet(obj, subscriptionId, resourceGroupName, clusterName, privateEndpointConnectionName, api_version) + % privateEndpointConnectionsGet No summary provided + % Gets a private endpoint connection. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % privateEndpointConnectionName - The name of the private endpoint connection., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved a specified private endpoint connection. + % 0: Error response describing why the operation failed. + % + % Returns: PrivateEndpointConnection + % + % See Also: adx.control.models.PrivateEndpointConnection + + arguments + obj adx.control.api.PrivateEndpointConnections + subscriptionId string + resourceGroupName string + clusterName string + privateEndpointConnectionName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateEndpointConnectionsGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateEndpointConnectionsGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateEndpointConnections/{privateEndpointConnectionName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "privateEndpointConnectionName" +"}") = privateEndpointConnectionName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateEndpointConnectionsGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateEndpointConnectionsGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.PrivateEndpointConnection(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateEndpointConnectionsGet method + + function [code, result, response] = privateEndpointConnectionsList(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % privateEndpointConnectionsList No summary provided + % Returns the list of private endpoint connections. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The list result of private endpoint connections. + % 0: Error response describing why the operation failed. + % + % Returns: PrivateEndpointConnectionListResult + % + % See Also: adx.control.models.PrivateEndpointConnectionListResult + + arguments + obj adx.control.api.PrivateEndpointConnections + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateEndpointConnectionsList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateEndpointConnectionsList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateEndpointConnections"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateEndpointConnectionsList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateEndpointConnectionsList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.PrivateEndpointConnectionListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateEndpointConnectionsList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/PrivateLinkResources.m b/Software/MATLAB/app/system/+adx/+control/+api/PrivateLinkResources.m new file mode 100644 index 0000000..45eba1b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/PrivateLinkResources.m @@ -0,0 +1,315 @@ +classdef PrivateLinkResources < adx.control.BaseClient + % PrivateLinkResources No description provided + % + % PrivateLinkResources Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % PrivateLinkResources Methods: + % + % PrivateLinkResources - Constructor + % privateLinkResourcesGet - + % privateLinkResourcesList - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = PrivateLinkResources(options) + % PrivateLinkResources Constructor, creates a PrivateLinkResources instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.PrivateLinkResources(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.PrivateLinkResources("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.PrivateLinkResources("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.PrivateLinkResources("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = privateLinkResourcesGet(obj, subscriptionId, resourceGroupName, clusterName, privateLinkResourceName, api_version) + % privateLinkResourcesGet No summary provided + % Gets a private link resource. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % privateLinkResourceName - The name of the private link resource., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved a specified private link resource. + % 0: Error response describing why the operation failed. + % + % Returns: PrivateLinkResource + % + % See Also: adx.control.models.PrivateLinkResource + + arguments + obj adx.control.api.PrivateLinkResources + subscriptionId string + resourceGroupName string + clusterName string + privateLinkResourceName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateLinkResourcesGet:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateLinkResourcesGet") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateLinkResources/{privateLinkResourceName}"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "privateLinkResourceName" +"}") = privateLinkResourceName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateLinkResourcesGet", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateLinkResourcesGet", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.PrivateLinkResource(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateLinkResourcesGet method + + function [code, result, response] = privateLinkResourcesList(obj, subscriptionId, resourceGroupName, clusterName, api_version) + % privateLinkResourcesList No summary provided + % Returns the list of private link resources. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: Successfully retrieved private link resources. + % 0: Error response describing why the operation failed. + % + % Returns: PrivateLinkResourceListResult + % + % See Also: adx.control.models.PrivateLinkResourceListResult + + arguments + obj adx.control.api.PrivateLinkResources + subscriptionId string + resourceGroupName string + clusterName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:privateLinkResourcesList:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","privateLinkResourcesList") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/privateLinkResources"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("privateLinkResourcesList", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("privateLinkResourcesList", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.PrivateLinkResourceListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % privateLinkResourcesList method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+api/Scripts.m b/Software/MATLAB/app/system/+adx/+control/+api/Scripts.m new file mode 100644 index 0000000..57eaf12 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+api/Scripts.m @@ -0,0 +1,209 @@ +classdef Scripts < adx.control.BaseClient + % Scripts No description provided + % + % Scripts Properties: + % + % serverUri - Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + % httpOptions - HTTPOptions used by all requests. + % preferredAuthMethod - If operation supports multiple authentication methods, specified which + % method to prefer. + % bearerToken - If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication, consider adding the relevant header to + % all requests in the preSend method. + % apiKey - If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication, consider adding the API key to all + % requests in the preSend method. + % httpCredentials - If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been specified in the spec but most operations do require + % Basic authentication, consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + % cookies - Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + % + % Scripts Methods: + % + % Scripts - Constructor + % scriptsListByDatabase - + % + % See Also: matlab.net.http.HTTPOptions, matlab.net.http.Credentials, + % CookieJar.setCookies, control.BaseClient + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + % Instruct MATLAB Code Analyzer to ignore unnecessary brackets + %#ok<*NBRAK2> + + % Class properties + properties + end + + % Class methods + methods + function obj = Scripts(options) + % Scripts Constructor, creates a Scripts instance. + % When called without inputs, tries to load configuration + % options from JSON file 'adx.Client.Settings.json'. + % If this file is not present, the instance is initialized with + % default configuration option. An alternative configuration + % file can be provided through the "configFile" Name-Value pair. + % All other properties of the instance can also be overridden + % using Name-Value pairs where Name equals the property name. + % + % Examples: + % + % % Create a client with default options and serverUri + % % as parsed from OpenAPI spec (if available) + % client = adx.control.api.Scripts(); + % + % % Create a client for alternative server/base URI + % client = adx.control.api.Scripts("serverUri","https://example.com:1234/api/"); + % + % % Create a client loading configuration options from + % % JSON configuration file + % client = adx.control.api.Scripts("configFile","myconfig.json"); + % + % % Create a client with alternative HTTPOptions and an API key + % client = adx.control.api.Scripts("httpOptions",... + % matlab.net.http.HTTPOptions("ConnectTimeout",42),... + % "apiKey", "ABC123"); + + arguments + options.configFile string + options.?adx.control.BaseClient + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = scriptsListByDatabase(obj, subscriptionId, resourceGroupName, clusterName, databaseName, api_version) + % scriptsListByDatabase No summary provided + % Returns the list of database scripts for given database. + % + % Required parameters: + % subscriptionId - The ID of the target subscription., Type: string + % resourceGroupName - The name of the resource group. The name is case insensitive., Type: string + % clusterName - The name of the Kusto cluster., Type: string + % databaseName - The name of the database in the Kusto cluster., Type: string + % api_version - The API version to use for this operation., Type: string + % + % No optional parameters + % + % Responses: + % 200: The list result of Kusto database scripts. + % 0: Error response describing why the operation failed. + % + % Returns: ScriptListResult + % + % See Also: adx.control.models.ScriptListResult + + arguments + obj adx.control.api.Scripts + subscriptionId string + resourceGroupName string + clusterName string + databaseName string + api_version string + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("control:api:scriptsListByDatabase:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","scriptsListByDatabase") + end + + % No body input, so no need to check its content type + + % No header parameters + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('GET'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + uri = matlab.net.URI("https://management.azure.com"); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}/databases/{databaseName}/scripts"; + + % Substitute path parameters + uri.Path(uri.Path == "{" + "subscriptionId" +"}") = subscriptionId; + uri.Path(uri.Path == "{" + "resourceGroupName" +"}") = resourceGroupName; + uri.Path(uri.Path == "{" + "clusterName" +"}") = clusterName; + uri.Path(uri.Path == "{" + "databaseName" +"}") = databaseName; + + % Set query parameters + uri.Query(end+1) = matlab.net.QueryParameter("api-version", api_version); + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("scriptsListByDatabase", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("scriptsListByDatabase", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.control.models.ScriptListResult(response.Body.Data); + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + + end % scriptsListByDatabase method + + end %methods +end %class + + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AcceptedAudiences.m b/Software/MATLAB/app/system/+adx/+control/+models/AcceptedAudiences.m new file mode 100644 index 0000000..fe0a357 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AcceptedAudiences.m @@ -0,0 +1,34 @@ +classdef AcceptedAudiences < adx.control.JSONMapper +% AcceptedAudiences Represents an accepted audience trusted by the cluster. +% +% AcceptedAudiences Properties: +% value - GUID or valid URL representing an accepted audience. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - GUID or valid URL representing an accepted audience. - type: string + value string { adx.control.JSONMapper.fieldName(value,"value") } + end + + % Class methods + methods + % Constructor + function obj = AcceptedAudiences(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AcceptedAudiences + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.m new file mode 100644 index 0000000..b0900fc --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000.m @@ -0,0 +1,16 @@ +classdef AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 < adx.control.JSONEnum +% AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Union ("Union") + Replace ("Replace") + None ("None") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.m new file mode 100644 index 0000000..62fc761 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001.m @@ -0,0 +1,16 @@ +classdef AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 < adx.control.JSONEnum +% AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Union ("Union") + Replace ("Replace") + None ("None") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiguration.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiguration.m new file mode 100644 index 0000000..83941eb --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfiguration.m @@ -0,0 +1,46 @@ +classdef AttachedDatabaseConfiguration < adx.control.JSONMapper +% AttachedDatabaseConfiguration Class representing an attached database configuration. +% +% AttachedDatabaseConfiguration Properties: +% location - Resource location. - type: string +% xproperties - type: AttachedDatabaseConfigurationProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % location - Resource location. - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % xproperties - type: AttachedDatabaseConfigurationProperties_1 + xproperties adx.control.models.AttachedDatabaseConfigurationProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = AttachedDatabaseConfiguration(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AttachedDatabaseConfiguration + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationListResult.m new file mode 100644 index 0000000..a2571a2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationListResult.m @@ -0,0 +1,34 @@ +classdef AttachedDatabaseConfigurationListResult < adx.control.JSONMapper +% AttachedDatabaseConfigurationListResult The list attached database configurations operation response. +% +% AttachedDatabaseConfigurationListResult Properties: +% value - The list of attached database configurations. - type: array of AttachedDatabaseConfiguration + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of attached database configurations. - type: array of AttachedDatabaseConfiguration + value adx.control.models.AttachedDatabaseConfiguration { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = AttachedDatabaseConfigurationListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AttachedDatabaseConfigurationListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties.m new file mode 100644 index 0000000..cff7b13 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties.m @@ -0,0 +1,55 @@ +classdef AttachedDatabaseConfigurationProperties < adx.control.JSONMapper +% AttachedDatabaseConfigurationProperties Class representing the an attached database configuration properties of kind specific. +% +% AttachedDatabaseConfigurationProperties Properties: +% provisioningState - type: ProvisioningState +% databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string +% clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string +% attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string +% defaultPrincipalsModificationKind - The default principals modification kind - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties +% databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string +% databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + databaseName string { adx.control.JSONMapper.fieldName(databaseName,"databaseName") } + % clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + clusterResourceId string { adx.control.JSONMapper.fieldName(clusterResourceId,"clusterResourceId") } + % attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + attachedDatabaseNames string { adx.control.JSONMapper.fieldName(attachedDatabaseNames,"attachedDatabaseNames"), adx.control.JSONMapper.JSONArray } + % defaultPrincipalsModificationKind - The default principals modification kind - type: string + defaultPrincipalsModificationKind adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0000 { adx.control.JSONMapper.fieldName(defaultPrincipalsModificationKind,"defaultPrincipalsModificationKind") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + % databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNameOverride string { adx.control.JSONMapper.fieldName(databaseNameOverride,"databaseNameOverride") } + % databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string + databaseNamePrefix string { adx.control.JSONMapper.fieldName(databaseNamePrefix,"databaseNamePrefix") } + end + + % Class methods + methods + % Constructor + function obj = AttachedDatabaseConfigurationProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AttachedDatabaseConfigurationProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties_1.m new file mode 100644 index 0000000..5ba3143 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationProperties_1.m @@ -0,0 +1,55 @@ +classdef AttachedDatabaseConfigurationProperties_1 < adx.control.JSONMapper +% AttachedDatabaseConfigurationProperties_1 Class representing the an attached database configuration properties of kind specific. +% +% AttachedDatabaseConfigurationProperties_1 Properties: +% provisioningState - type: ProvisioningState +% databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string +% clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string +% attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string +% defaultPrincipalsModificationKind - The default principals modification kind - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties +% databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string +% databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % databaseName - The name of the database which you would like to attach, use * if you want to follow all current and future databases. - type: string + databaseName string { adx.control.JSONMapper.fieldName(databaseName,"databaseName") } + % clusterResourceId - The resource id of the cluster where the databases you would like to attach reside. - type: string + clusterResourceId string { adx.control.JSONMapper.fieldName(clusterResourceId,"clusterResourceId") } + % attachedDatabaseNames - The list of databases from the clusterResourceId which are currently attached to the cluster. - type: array of string + attachedDatabaseNames string { adx.control.JSONMapper.fieldName(attachedDatabaseNames,"attachedDatabaseNames"), adx.control.JSONMapper.JSONArray } + % defaultPrincipalsModificationKind - The default principals modification kind - type: string + defaultPrincipalsModificationKind adx.control.models.AttachedDatabaseConfiDefaultPrincipalsModificationKindEnum_0001 { adx.control.JSONMapper.fieldName(defaultPrincipalsModificationKind,"defaultPrincipalsModificationKind") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + % databaseNameOverride - Overrides the original database name. Relevant only when attaching to a specific database. - type: string + databaseNameOverride string { adx.control.JSONMapper.fieldName(databaseNameOverride,"databaseNameOverride") } + % databaseNamePrefix - Adds a prefix to the attached databases name. When following an entire cluster, that prefix would be added to all of the databases original names from leader cluster. - type: string + databaseNamePrefix string { adx.control.JSONMapper.fieldName(databaseNamePrefix,"databaseNamePrefix") } + end + + % Class methods + methods + % Constructor + function obj = AttachedDatabaseConfigurationProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AttachedDatabaseConfigurationProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequest.m new file mode 100644 index 0000000..c415a12 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef AttachedDatabaseConfigurationsCheckNameRequest < adx.control.JSONMapper +% AttachedDatabaseConfigurationsCheckNameRequest The result returned from a AttachedDatabaseConfigurations check name availability request. +% +% AttachedDatabaseConfigurationsCheckNameRequest Properties: +% name - Attached database resource name. - type: string +% type - The type of resource, for instance Microsoft.Kusto/clusters/attachedDatabaseConfigurations. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Attached database resource name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, for instance Microsoft.Kusto/clusters/attachedDatabaseConfigurations. - type: string + type adx.control.models.AttachedDatabaseConfigurationsCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = AttachedDatabaseConfigurationsCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AttachedDatabaseConfigurationsCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..1a46a1a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AttachedDatabaseConfigurationsCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef AttachedDatabaseConfigurationsCheckNameRequestTypeEnum < adx.control.JSONEnum +% AttachedDatabaseConfigurationsCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_attachedDatabaseConfigurations ("Microsoft.Kusto/clusters/attachedDatabaseConfigurations") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacity.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacity.m new file mode 100644 index 0000000..6df47cd --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacity.m @@ -0,0 +1,43 @@ +classdef AzureCapacity < adx.control.JSONMapper +% AzureCapacity Azure capacity definition. +% +% AzureCapacity Properties: +% scaleType - Scale type. - type: string +% minimum - Minimum allowed capacity. - type: int32 +% maximum - Maximum allowed capacity. - type: int32 +% default - The default capacity that would be used. - type: int32 + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % scaleType - Scale type. - type: string + scaleType adx.control.models.AzureCapacityScaleTypeEnum { adx.control.JSONMapper.fieldName(scaleType,"scaleType") } + % minimum - Minimum allowed capacity. - type: int32 + minimum int32 { adx.control.JSONMapper.fieldName(minimum,"minimum") } + % maximum - Maximum allowed capacity. - type: int32 + maximum int32 { adx.control.JSONMapper.fieldName(maximum,"maximum") } + % default - The default capacity that would be used. - type: int32 + default int32 { adx.control.JSONMapper.fieldName(default,"default") } + end + + % Class methods + methods + % Constructor + function obj = AzureCapacity(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AzureCapacity + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacityScaleTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacityScaleTypeEnum.m new file mode 100644 index 0000000..8a08777 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureCapacityScaleTypeEnum.m @@ -0,0 +1,16 @@ +classdef AzureCapacityScaleTypeEnum < adx.control.JSONEnum +% AzureCapacityScaleTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + automatic ("automatic") + manual ("manual") + none ("none") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku.m new file mode 100644 index 0000000..6d734f0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku.m @@ -0,0 +1,40 @@ +classdef AzureResourceSku < adx.control.JSONMapper +% AzureResourceSku Azure resource SKU definition. +% +% AzureResourceSku Properties: +% resourceType - Resource Namespace and Type. - type: string +% sku - type: AzureSku +% capacity - type: AzureCapacity + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % resourceType - Resource Namespace and Type. - type: string + resourceType string { adx.control.JSONMapper.fieldName(resourceType,"resourceType") } + % sku - type: AzureSku + sku adx.control.models.AzureSku { adx.control.JSONMapper.fieldName(sku,"sku") } + % capacity - type: AzureCapacity + capacity adx.control.models.AzureCapacity { adx.control.JSONMapper.fieldName(capacity,"capacity") } + end + + % Class methods + methods + % Constructor + function obj = AzureResourceSku(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AzureResourceSku + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku_1.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku_1.m new file mode 100644 index 0000000..01452f4 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureResourceSku_1.m @@ -0,0 +1,40 @@ +classdef AzureResourceSku_1 < adx.control.JSONMapper +% AzureResourceSku_1 Azure resource SKU definition. +% +% AzureResourceSku_1 Properties: +% resourceType - Resource Namespace and Type. - type: string +% sku - type: AzureSku +% capacity - type: AzureCapacity + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % resourceType - Resource Namespace and Type. - type: string + resourceType string { adx.control.JSONMapper.fieldName(resourceType,"resourceType") } + % sku - type: AzureSku + sku adx.control.models.AzureSku { adx.control.JSONMapper.fieldName(sku,"sku") } + % capacity - type: AzureCapacity + capacity adx.control.models.AzureCapacity { adx.control.JSONMapper.fieldName(capacity,"capacity") } + end + + % Class methods + methods + % Constructor + function obj = AzureResourceSku_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AzureResourceSku_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureSku.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureSku.m new file mode 100644 index 0000000..c1fc024 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureSku.m @@ -0,0 +1,40 @@ +classdef AzureSku < adx.control.JSONMapper +% AzureSku Azure SKU definition. +% +% AzureSku Properties: +% name - SKU name. - type: string +% capacity - The number of instances of the cluster. - type: int32 +% tier - SKU tier. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - SKU name. - type: string + name adx.control.models.AzureSkuNameEnum { adx.control.JSONMapper.fieldName(name,"name") } + % capacity - The number of instances of the cluster. - type: int32 + capacity int32 { adx.control.JSONMapper.fieldName(capacity,"capacity") } + % tier - SKU tier. - type: string + tier adx.control.models.AzureSkuTierEnum { adx.control.JSONMapper.fieldName(tier,"tier") } + end + + % Class methods + methods + % Constructor + function obj = AzureSku(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.AzureSku + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuNameEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuNameEnum.m new file mode 100644 index 0000000..ad4362d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuNameEnum.m @@ -0,0 +1,77 @@ +classdef AzureSkuNameEnum < adx.control.JSONEnum +% AzureSkuNameEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Dev_No_SLA_Standard_D11_v2 ("Dev(No SLA)_Standard_D11_v2") + Dev_No_SLA_Standard_E2a_v4 ("Dev(No SLA)_Standard_E2a_v4") + Standard_D11_v2 ("Standard_D11_v2") + Standard_D12_v2 ("Standard_D12_v2") + Standard_D13_v2 ("Standard_D13_v2") + Standard_D14_v2 ("Standard_D14_v2") + Standard_D32d_v4 ("Standard_D32d_v4") + Standard_D16d_v5 ("Standard_D16d_v5") + Standard_D32d_v5 ("Standard_D32d_v5") + Standard_DS13_v21TB_PS ("Standard_DS13_v2+1TB_PS") + Standard_DS13_v22TB_PS ("Standard_DS13_v2+2TB_PS") + Standard_DS14_v23TB_PS ("Standard_DS14_v2+3TB_PS") + Standard_DS14_v24TB_PS ("Standard_DS14_v2+4TB_PS") + Standard_L4s ("Standard_L4s") + Standard_L8s ("Standard_L8s") + Standard_L16s ("Standard_L16s") + Standard_L8s_v2 ("Standard_L8s_v2") + Standard_L16s_v2 ("Standard_L16s_v2") + Standard_L8s_v3 ("Standard_L8s_v3") + Standard_L16s_v3 ("Standard_L16s_v3") + Standard_L32s_v3 ("Standard_L32s_v3") + Standard_L8as_v3 ("Standard_L8as_v3") + Standard_L16as_v3 ("Standard_L16as_v3") + Standard_L32as_v3 ("Standard_L32as_v3") + Standard_E64i_v3 ("Standard_E64i_v3") + Standard_E80ids_v4 ("Standard_E80ids_v4") + Standard_E2a_v4 ("Standard_E2a_v4") + Standard_E4a_v4 ("Standard_E4a_v4") + Standard_E8a_v4 ("Standard_E8a_v4") + Standard_E16a_v4 ("Standard_E16a_v4") + Standard_E8as_v41TB_PS ("Standard_E8as_v4+1TB_PS") + Standard_E8as_v42TB_PS ("Standard_E8as_v4+2TB_PS") + Standard_E16as_v43TB_PS ("Standard_E16as_v4+3TB_PS") + Standard_E16as_v44TB_PS ("Standard_E16as_v4+4TB_PS") + Standard_E8as_v51TB_PS ("Standard_E8as_v5+1TB_PS") + Standard_E8as_v52TB_PS ("Standard_E8as_v5+2TB_PS") + Standard_E16as_v53TB_PS ("Standard_E16as_v5+3TB_PS") + Standard_E16as_v54TB_PS ("Standard_E16as_v5+4TB_PS") + Standard_E2ads_v5 ("Standard_E2ads_v5") + Standard_E4ads_v5 ("Standard_E4ads_v5") + Standard_E8ads_v5 ("Standard_E8ads_v5") + Standard_E16ads_v5 ("Standard_E16ads_v5") + Standard_EC8as_v51TB_PS ("Standard_EC8as_v5+1TB_PS") + Standard_EC8as_v52TB_PS ("Standard_EC8as_v5+2TB_PS") + Standard_EC16as_v53TB_PS ("Standard_EC16as_v5+3TB_PS") + Standard_EC16as_v54TB_PS ("Standard_EC16as_v5+4TB_PS") + Standard_EC8ads_v5 ("Standard_EC8ads_v5") + Standard_EC16ads_v5 ("Standard_EC16ads_v5") + Standard_E8s_v41TB_PS ("Standard_E8s_v4+1TB_PS") + Standard_E8s_v42TB_PS ("Standard_E8s_v4+2TB_PS") + Standard_E16s_v43TB_PS ("Standard_E16s_v4+3TB_PS") + Standard_E16s_v44TB_PS ("Standard_E16s_v4+4TB_PS") + Standard_E8s_v51TB_PS ("Standard_E8s_v5+1TB_PS") + Standard_E8s_v52TB_PS ("Standard_E8s_v5+2TB_PS") + Standard_E16s_v53TB_PS ("Standard_E16s_v5+3TB_PS") + Standard_E16s_v54TB_PS ("Standard_E16s_v5+4TB_PS") + Standard_E2d_v4 ("Standard_E2d_v4") + Standard_E4d_v4 ("Standard_E4d_v4") + Standard_E8d_v4 ("Standard_E8d_v4") + Standard_E16d_v4 ("Standard_E16d_v4") + Standard_E2d_v5 ("Standard_E2d_v5") + Standard_E4d_v5 ("Standard_E4d_v5") + Standard_E8d_v5 ("Standard_E8d_v5") + Standard_E16d_v5 ("Standard_E16d_v5") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuTierEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuTierEnum.m new file mode 100644 index 0000000..a7319d8 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/AzureSkuTierEnum.m @@ -0,0 +1,15 @@ +classdef AzureSkuTierEnum < adx.control.JSONEnum +% AzureSkuTierEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Basic ("Basic") + Standard ("Standard") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/BlobStorageEventType.m b/Software/MATLAB/app/system/+adx/+control/+models/BlobStorageEventType.m new file mode 100644 index 0000000..87a7443 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/BlobStorageEventType.m @@ -0,0 +1,15 @@ +classdef BlobStorageEventType < adx.control.JSONEnum +% BlobStorageEventType The name of blob storage event type to process. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Storage_BlobCreated ("Microsoft.Storage.BlobCreated") + Microsoft_Storage_BlobRenamed ("Microsoft.Storage.BlobRenamed") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequest.m new file mode 100644 index 0000000..b496847 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequest.m @@ -0,0 +1,37 @@ +classdef CheckNameRequest < adx.control.JSONMapper +% CheckNameRequest The result returned from a database check name availability request. +% +% CheckNameRequest Properties: +% name - Resource name. - type: string +% type - The type of resource, for instance Microsoft.Kusto/clusters/databases. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Resource name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, for instance Microsoft.Kusto/clusters/databases. - type: string + type adx.control.models.CheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = CheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.CheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequestTypeEnum.m new file mode 100644 index 0000000..123b9a2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameRequestTypeEnum.m @@ -0,0 +1,15 @@ +classdef CheckNameRequestTypeEnum < adx.control.JSONEnum +% CheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_databases ("Microsoft.Kusto/clusters/databases") + Microsoft_Kusto_clusters_attachedDatabaseConfigurations ("Microsoft.Kusto/clusters/attachedDatabaseConfigurations") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResult.m b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResult.m new file mode 100644 index 0000000..c099e38 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResult.m @@ -0,0 +1,43 @@ +classdef CheckNameResult < adx.control.JSONMapper +% CheckNameResult The result returned from a check name availability request. +% +% CheckNameResult Properties: +% nameAvailable - Specifies a Boolean value that indicates if the name is available. - type: logical +% name - The name that was checked. - type: string +% message - Message indicating an unavailable name due to a conflict, or a description of the naming rules that are violated. - type: string +% reason - Message providing the reason why the given name is invalid. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % nameAvailable - Specifies a Boolean value that indicates if the name is available. - type: logical + nameAvailable logical { adx.control.JSONMapper.fieldName(nameAvailable,"nameAvailable") } + % name - The name that was checked. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % message - Message indicating an unavailable name due to a conflict, or a description of the naming rules that are violated. - type: string + message string { adx.control.JSONMapper.fieldName(message,"message") } + % reason - Message providing the reason why the given name is invalid. - type: string + reason adx.control.models.CheckNameResultReasonEnum { adx.control.JSONMapper.fieldName(reason,"reason") } + end + + % Class methods + methods + % Constructor + function obj = CheckNameResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.CheckNameResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResultReasonEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResultReasonEnum.m new file mode 100644 index 0000000..b6ad5f9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CheckNameResultReasonEnum.m @@ -0,0 +1,15 @@ +classdef CheckNameResultReasonEnum < adx.control.JSONEnum +% CheckNameResultReasonEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Invalid ("Invalid") + AlreadyExists ("AlreadyExists") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Cluster.m b/Software/MATLAB/app/system/+adx/+control/+models/Cluster.m new file mode 100644 index 0000000..6e37a28 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Cluster.m @@ -0,0 +1,61 @@ +classdef Cluster < adx.control.JSONMapper +% Cluster Class representing a Kusto cluster. +% +% Cluster Properties: +% sku - type: AzureSku +% systemData - type: systemData +% zones - An array represents the availability zones of the cluster. - type: array of string +% identity - type: Identity +% xproperties - type: ClusterProperties_1 +% etag - A unique read-only string that changes whenever the resource is updated. - type: string +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % sku - type: AzureSku + sku adx.control.models.AzureSku { adx.control.JSONMapper.fieldName(sku,"sku") } + % systemData - type: systemData + systemData adx.control.models.systemData { adx.control.JSONMapper.fieldName(systemData,"systemData") } + % zones - An array represents the availability zones of the cluster. - type: array of string + zones string { adx.control.JSONMapper.fieldName(zones,"zones"), adx.control.JSONMapper.JSONArray } + % identity - type: Identity + identity adx.control.models.Identity { adx.control.JSONMapper.fieldName(identity,"identity") } + % xproperties - type: ClusterProperties_1 + xproperties adx.control.models.ClusterProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % etag - A unique read-only string that changes whenever the resource is updated. - type: string + etag string { adx.control.JSONMapper.fieldName(etag,"etag") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + + location string {adx.control.JSONMapper.fieldName(location,"location")} + tags adx.control.JSONMapperMap { adx.control.JSONMapper.fieldName(tags,"tags") } + end + + % Class methods + methods + % Constructor + function obj = Cluster(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Cluster + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequest.m new file mode 100644 index 0000000..f8a2321 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef ClusterCheckNameRequest < adx.control.JSONMapper +% ClusterCheckNameRequest The result returned from a cluster check name availability request. +% +% ClusterCheckNameRequest Properties: +% name - Cluster name. - type: string +% type - The type of resource, Microsoft.Kusto/clusters. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Cluster name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, Microsoft.Kusto/clusters. - type: string + type adx.control.models.ClusterCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ClusterCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..569b26d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef ClusterCheckNameRequestTypeEnum < adx.control.JSONEnum +% ClusterCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters ("Microsoft.Kusto/clusters") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterListResult.m new file mode 100644 index 0000000..5d205c8 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterListResult.m @@ -0,0 +1,34 @@ +classdef ClusterListResult < adx.control.JSONMapper +% ClusterListResult The list Kusto clusters operation response. +% +% ClusterListResult Properties: +% value - The list of Kusto clusters. - type: array of Cluster + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto clusters. - type: array of Cluster + value adx.control.models.Cluster { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ClusterListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterMigrateRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterMigrateRequest.m new file mode 100644 index 0000000..bc5331b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterMigrateRequest.m @@ -0,0 +1,34 @@ +classdef ClusterMigrateRequest < adx.control.JSONMapper +% ClusterMigrateRequest A cluster migrate request. +% +% ClusterMigrateRequest Properties: +% clusterResourceId - Resource ID of the destination cluster or kusto pool. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % clusterResourceId - Resource ID of the destination cluster or kusto pool. - type: string + clusterResourceId string { adx.control.JSONMapper.fieldName(clusterResourceId,"clusterResourceId") } + end + + % Class methods + methods + % Constructor + function obj = ClusterMigrateRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterMigrateRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignment.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignment.m new file mode 100644 index 0000000..987b5aa --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignment.m @@ -0,0 +1,43 @@ +classdef ClusterPrincipalAssignment < adx.control.JSONMapper +% ClusterPrincipalAssignment Class representing a cluster principal assignment. +% +% ClusterPrincipalAssignment Properties: +% xproperties - type: ClusterPrincipalProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: ClusterPrincipalProperties_1 + xproperties adx.control.models.ClusterPrincipalProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ClusterPrincipalAssignment(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterPrincipalAssignment + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequest.m new file mode 100644 index 0000000..f6ab947 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef ClusterPrincipalAssignmentCheckNameRequest < adx.control.JSONMapper +% ClusterPrincipalAssignmentCheckNameRequest A principal assignment check name availability request. +% +% ClusterPrincipalAssignmentCheckNameRequest Properties: +% name - Principal Assignment resource name. - type: string +% type - The type of resource, Microsoft.Kusto/clusters/principalAssignments. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Principal Assignment resource name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, Microsoft.Kusto/clusters/principalAssignments. - type: string + type adx.control.models.ClusterPrincipalAssignmentCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ClusterPrincipalAssignmentCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterPrincipalAssignmentCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..e5c7901 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef ClusterPrincipalAssignmentCheckNameRequestTypeEnum < adx.control.JSONEnum +% ClusterPrincipalAssignmentCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_principalAssignments ("Microsoft.Kusto/clusters/principalAssignments") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentListResult.m new file mode 100644 index 0000000..9a52bca --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalAssignmentListResult.m @@ -0,0 +1,34 @@ +classdef ClusterPrincipalAssignmentListResult < adx.control.JSONMapper +% ClusterPrincipalAssignmentListResult The list Kusto cluster principal assignments operation response. +% +% ClusterPrincipalAssignmentListResult Properties: +% value - The list of Kusto cluster principal assignments. - type: array of ClusterPrincipalAssignment + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto cluster principal assignments. - type: array of ClusterPrincipalAssignment + value adx.control.models.ClusterPrincipalAssignment { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ClusterPrincipalAssignmentListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterPrincipalAssignmentListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties.m new file mode 100644 index 0000000..1c81058 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties.m @@ -0,0 +1,55 @@ +classdef ClusterPrincipalProperties < adx.control.JSONMapper +% ClusterPrincipalProperties A class representing cluster principal property. +% +% ClusterPrincipalProperties Properties: +% principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string +% role - Cluster principal role. - type: string +% tenantId - The tenant id of the principal - type: string +% principalType - Principal type. - type: string +% tenantName - The tenant name of the principal - type: string +% principalName - The principal name - type: string +% provisioningState - type: ProvisioningState +% aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % role - Cluster principal role. - type: string + role adx.control.models.ClusterPrincipalPropertiesRoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + % tenantId - The tenant id of the principal - type: string + tenantId string { adx.control.JSONMapper.fieldName(tenantId,"tenantId") } + % principalType - Principal type. - type: string + principalType adx.control.models.ClusterPrincipalPropertiesPrincipalTypeEnum { adx.control.JSONMapper.fieldName(principalType,"principalType") } + % tenantName - The tenant name of the principal - type: string + tenantName string { adx.control.JSONMapper.fieldName(tenantName,"tenantName") } + % principalName - The principal name - type: string + principalName string { adx.control.JSONMapper.fieldName(principalName,"principalName") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + aadObjectId string { adx.control.JSONMapper.fieldName(aadObjectId,"aadObjectId") } + end + + % Class methods + methods + % Constructor + function obj = ClusterPrincipalProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterPrincipalProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesPrincipalTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesPrincipalTypeEnum.m new file mode 100644 index 0000000..75ef058 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesPrincipalTypeEnum.m @@ -0,0 +1,16 @@ +classdef ClusterPrincipalPropertiesPrincipalTypeEnum < adx.control.JSONEnum +% ClusterPrincipalPropertiesPrincipalTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + App ("App") + Group ("Group") + User ("User") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesRoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesRoleEnum.m new file mode 100644 index 0000000..e70e6c5 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalPropertiesRoleEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPrincipalPropertiesRoleEnum < adx.control.JSONEnum +% ClusterPrincipalPropertiesRoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + AllDatabasesAdmin ("AllDatabasesAdmin") + AllDatabasesViewer ("AllDatabasesViewer") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1.m new file mode 100644 index 0000000..45997a8 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1.m @@ -0,0 +1,55 @@ +classdef ClusterPrincipalProperties_1 < adx.control.JSONMapper +% ClusterPrincipalProperties_1 A class representing cluster principal property. +% +% ClusterPrincipalProperties_1 Properties: +% principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string +% role - Cluster principal role. - type: string +% tenantId - The tenant id of the principal - type: string +% principalType - Principal type. - type: string +% tenantName - The tenant name of the principal - type: string +% principalName - The principal name - type: string +% provisioningState - type: ProvisioningState +% aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal ID assigned to the cluster principal. It can be a user email, application ID, or security group name. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % role - Cluster principal role. - type: string + role adx.control.models.ClusterPrincipalProperties_1RoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + % tenantId - The tenant id of the principal - type: string + tenantId string { adx.control.JSONMapper.fieldName(tenantId,"tenantId") } + % principalType - Principal type. - type: string + principalType adx.control.models.ClusterPrincipalProperties_1PrincipalTypeEnum { adx.control.JSONMapper.fieldName(principalType,"principalType") } + % tenantName - The tenant name of the principal - type: string + tenantName string { adx.control.JSONMapper.fieldName(tenantName,"tenantName") } + % principalName - The principal name - type: string + principalName string { adx.control.JSONMapper.fieldName(principalName,"principalName") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + aadObjectId string { adx.control.JSONMapper.fieldName(aadObjectId,"aadObjectId") } + end + + % Class methods + methods + % Constructor + function obj = ClusterPrincipalProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterPrincipalProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1PrincipalTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1PrincipalTypeEnum.m new file mode 100644 index 0000000..a4b8820 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1PrincipalTypeEnum.m @@ -0,0 +1,16 @@ +classdef ClusterPrincipalProperties_1PrincipalTypeEnum < adx.control.JSONEnum +% ClusterPrincipalProperties_1PrincipalTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + App ("App") + Group ("Group") + User ("User") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1RoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1RoleEnum.m new file mode 100644 index 0000000..73eaaa5 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPrincipalProperties_1RoleEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPrincipalProperties_1RoleEnum < adx.control.JSONEnum +% ClusterPrincipalProperties_1RoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + AllDatabasesAdmin ("AllDatabasesAdmin") + AllDatabasesViewer ("AllDatabasesViewer") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties.m new file mode 100644 index 0000000..d51ab09 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties.m @@ -0,0 +1,106 @@ +classdef ClusterProperties < adx.control.JSONMapper +% ClusterProperties Class representing the Kusto cluster properties. +% +% ClusterProperties Properties: +% state - The state of the resource. - type: string +% provisioningState - type: ProvisioningState +% uri - The cluster URI. - type: string +% dataIngestionUri - The cluster data ingestion URI. - type: string +% stateReason - The reason for the cluster''s current state. - type: string +% trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant +% optimizedAutoscale - type: OptimizedAutoscale +% enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical +% enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical +% virtualNetworkConfiguration - type: VirtualNetworkConfiguration +% keyVaultProperties - type: KeyVaultProperties +% enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical +% languageExtensions - type: LanguageExtensionsList +% enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical +% publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string +% allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string +% engineType - The engine type - type: string +% acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences +% enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical +% restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string +% allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string +% publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string +% virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string +% privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection +% migrationCluster - type: MigrationClusterProperties + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % state - The state of the resource. - type: string + state adx.control.models.ClusterPropertiesStateEnum { adx.control.JSONMapper.fieldName(state,"state") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % uri - The cluster URI. - type: string + uri string { adx.control.JSONMapper.fieldName(uri,"uri") } + % dataIngestionUri - The cluster data ingestion URI. - type: string + dataIngestionUri string { adx.control.JSONMapper.fieldName(dataIngestionUri,"dataIngestionUri") } + % stateReason - The reason for the cluster''s current state. - type: string + stateReason string { adx.control.JSONMapper.fieldName(stateReason,"stateReason") } + % trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + trustedExternalTenants adx.control.models.TrustedExternalTenant { adx.control.JSONMapper.fieldName(trustedExternalTenants,"trustedExternalTenants"), adx.control.JSONMapper.JSONArray } + % optimizedAutoscale - type: OptimizedAutoscale + optimizedAutoscale { adx.control.JSONMapper.fieldName(optimizedAutoscale,"optimizedAutoscale") } + % enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableDiskEncryption logical { adx.control.JSONMapper.fieldName(enableDiskEncryption,"enableDiskEncryption") } + % enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + enableStreamingIngest logical { adx.control.JSONMapper.fieldName(enableStreamingIngest,"enableStreamingIngest") } + % virtualNetworkConfiguration - type: VirtualNetworkConfiguration + virtualNetworkConfiguration { adx.control.JSONMapper.fieldName(virtualNetworkConfiguration,"virtualNetworkConfiguration") } + % keyVaultProperties - type: KeyVaultProperties + keyVaultProperties { adx.control.JSONMapper.fieldName(keyVaultProperties,"keyVaultProperties") } + % enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + enablePurge logical { adx.control.JSONMapper.fieldName(enablePurge,"enablePurge") } + % languageExtensions - type: LanguageExtensionsList + languageExtensions { adx.control.JSONMapper.fieldName(languageExtensions,"languageExtensions") } + % enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + enableDoubleEncryption logical { adx.control.JSONMapper.fieldName(enableDoubleEncryption,"enableDoubleEncryption") } + % publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + publicNetworkAccess adx.control.models.ClusterPropertiesPublicNetworkAccessEnum { adx.control.JSONMapper.fieldName(publicNetworkAccess,"publicNetworkAccess") } + % allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + allowedIpRangeList string { adx.control.JSONMapper.fieldName(allowedIpRangeList,"allowedIpRangeList"), adx.control.JSONMapper.JSONArray } + % engineType - The engine type - type: string + engineType adx.control.models.ClusterPropertiesEngineTypeEnum { adx.control.JSONMapper.fieldName(engineType,"engineType") } + % acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + acceptedAudiences adx.control.models.AcceptedAudiences { adx.control.JSONMapper.fieldName(acceptedAudiences,"acceptedAudiences"), adx.control.JSONMapper.JSONArray } + % enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + enableAutoStop logical { adx.control.JSONMapper.fieldName(enableAutoStop,"enableAutoStop") } + % restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + restrictOutboundNetworkAccess adx.control.models.ClusterPropertiesRestrictOutboundNetworkAccessEnum { adx.control.JSONMapper.fieldName(restrictOutboundNetworkAccess,"restrictOutboundNetworkAccess") } + % allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + allowedFqdnList string { adx.control.JSONMapper.fieldName(allowedFqdnList,"allowedFqdnList"), adx.control.JSONMapper.JSONArray } + % publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + publicIPType adx.control.models.ClusterPropertiesPublicIPTypeEnum { adx.control.JSONMapper.fieldName(publicIPType,"publicIPType") } + % virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + virtualClusterGraduationProperties string { adx.control.JSONMapper.fieldName(virtualClusterGraduationProperties,"virtualClusterGraduationProperties") } + % privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + privateEndpointConnections adx.control.models.PrivateEndpointConnection { adx.control.JSONMapper.fieldName(privateEndpointConnections,"privateEndpointConnections"), adx.control.JSONMapper.JSONArray } + % migrationCluster - type: MigrationClusterProperties + migrationCluster { adx.control.JSONMapper.fieldName(migrationCluster,"migrationCluster") } + end + + % Class methods + methods + % Constructor + function obj = ClusterProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesEngineTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesEngineTypeEnum.m new file mode 100644 index 0000000..06858b2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesEngineTypeEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPropertiesEngineTypeEnum < adx.control.JSONEnum +% ClusterPropertiesEngineTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + V2 ("V2") + V3 ("V3") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicIPTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicIPTypeEnum.m new file mode 100644 index 0000000..793cb2f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicIPTypeEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPropertiesPublicIPTypeEnum < adx.control.JSONEnum +% ClusterPropertiesPublicIPTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + IPv4 ("IPv4") + DualStack ("DualStack") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicNetworkAccessEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicNetworkAccessEnum.m new file mode 100644 index 0000000..a243a77 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesPublicNetworkAccessEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPropertiesPublicNetworkAccessEnum < adx.control.JSONEnum +% ClusterPropertiesPublicNetworkAccessEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Enabled ("Enabled") + Disabled ("Disabled") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesRestrictOutboundNetworkAccessEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesRestrictOutboundNetworkAccessEnum.m new file mode 100644 index 0000000..9e61c3d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesRestrictOutboundNetworkAccessEnum.m @@ -0,0 +1,15 @@ +classdef ClusterPropertiesRestrictOutboundNetworkAccessEnum < adx.control.JSONEnum +% ClusterPropertiesRestrictOutboundNetworkAccessEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Enabled ("Enabled") + Disabled ("Disabled") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesStateEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesStateEnum.m new file mode 100644 index 0000000..96667c9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterPropertiesStateEnum.m @@ -0,0 +1,23 @@ +classdef ClusterPropertiesStateEnum < adx.control.JSONEnum +% ClusterPropertiesStateEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Creating ("Creating") + Unavailable ("Unavailable") + Running ("Running") + Deleting ("Deleting") + Deleted ("Deleted") + Stopping ("Stopping") + Stopped ("Stopped") + Starting ("Starting") + Updating ("Updating") + Migrated ("Migrated") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1.m new file mode 100644 index 0000000..e6f35ef --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1.m @@ -0,0 +1,106 @@ +classdef ClusterProperties_1 < adx.control.JSONMapper +% ClusterProperties_1 Class representing the Kusto cluster properties. +% +% ClusterProperties_1 Properties: +% state - The state of the resource. - type: string +% provisioningState - type: ProvisioningState +% uri - The cluster URI. - type: string +% dataIngestionUri - The cluster data ingestion URI. - type: string +% stateReason - The reason for the cluster''s current state. - type: string +% trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant +% optimizedAutoscale - type: OptimizedAutoscale +% enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical +% enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical +% virtualNetworkConfiguration - type: VirtualNetworkConfiguration +% keyVaultProperties - type: KeyVaultProperties +% enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical +% languageExtensions - type: LanguageExtensionsList +% enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical +% publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string +% allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string +% engineType - The engine type - type: string +% acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences +% enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical +% restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string +% allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string +% publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string +% virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string +% privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection +% migrationCluster - type: MigrationClusterProperties + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % state - The state of the resource. - type: string + state adx.control.models.ClusterProperties_1StateEnum { adx.control.JSONMapper.fieldName(state,"state") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % uri - The cluster URI. - type: string + uri string { adx.control.JSONMapper.fieldName(uri,"uri") } + % dataIngestionUri - The cluster data ingestion URI. - type: string + dataIngestionUri string { adx.control.JSONMapper.fieldName(dataIngestionUri,"dataIngestionUri") } + % stateReason - The reason for the cluster''s current state. - type: string + stateReason string { adx.control.JSONMapper.fieldName(stateReason,"stateReason") } + % trustedExternalTenants - The cluster''s external tenants. - type: array of TrustedExternalTenant + trustedExternalTenants adx.control.models.TrustedExternalTenant { adx.control.JSONMapper.fieldName(trustedExternalTenants,"trustedExternalTenants"), adx.control.JSONMapper.JSONArray } + % optimizedAutoscale - type: OptimizedAutoscale + optimizedAutoscale { adx.control.JSONMapper.fieldName(optimizedAutoscale,"optimizedAutoscale") } + % enableDiskEncryption - A boolean value that indicates if the cluster''s disks are encrypted. - type: logical + enableDiskEncryption logical { adx.control.JSONMapper.fieldName(enableDiskEncryption,"enableDiskEncryption") } + % enableStreamingIngest - A boolean value that indicates if the streaming ingest is enabled. - type: logical + enableStreamingIngest logical { adx.control.JSONMapper.fieldName(enableStreamingIngest,"enableStreamingIngest") } + % virtualNetworkConfiguration - type: VirtualNetworkConfiguration + virtualNetworkConfiguration { adx.control.JSONMapper.fieldName(virtualNetworkConfiguration,"virtualNetworkConfiguration") } + % keyVaultProperties - type: KeyVaultProperties + keyVaultProperties { adx.control.JSONMapper.fieldName(keyVaultProperties,"keyVaultProperties") } + % enablePurge - A boolean value that indicates if the purge operations are enabled. - type: logical + enablePurge logical { adx.control.JSONMapper.fieldName(enablePurge,"enablePurge") } + % languageExtensions - type: LanguageExtensionsList + languageExtensions { adx.control.JSONMapper.fieldName(languageExtensions,"languageExtensions") } + % enableDoubleEncryption - A boolean value that indicates if double encryption is enabled. - type: logical + enableDoubleEncryption logical { adx.control.JSONMapper.fieldName(enableDoubleEncryption,"enableDoubleEncryption") } + % publicNetworkAccess - Public network access to the cluster is enabled by default. When disabled, only private endpoint connection to the cluster is allowed - type: string + publicNetworkAccess adx.control.models.ClusterProperties_1PublicNetworkAccessEnum { adx.control.JSONMapper.fieldName(publicNetworkAccess,"publicNetworkAccess") } + % allowedIpRangeList - The list of ips in the format of CIDR allowed to connect to the cluster. - type: array of string + allowedIpRangeList string { adx.control.JSONMapper.fieldName(allowedIpRangeList,"allowedIpRangeList"), adx.control.JSONMapper.JSONArray } + % engineType - The engine type - type: string + engineType adx.control.models.ClusterProperties_1EngineTypeEnum { adx.control.JSONMapper.fieldName(engineType,"engineType") } + % acceptedAudiences - The cluster''s accepted audiences. - type: array of AcceptedAudiences + acceptedAudiences adx.control.models.AcceptedAudiences { adx.control.JSONMapper.fieldName(acceptedAudiences,"acceptedAudiences"), adx.control.JSONMapper.JSONArray } + % enableAutoStop - A boolean value that indicates if the cluster could be automatically stopped (due to lack of data or no activity for many days). - type: logical + enableAutoStop logical { adx.control.JSONMapper.fieldName(enableAutoStop,"enableAutoStop") } + % restrictOutboundNetworkAccess - Whether or not to restrict outbound network access. Value is optional but if passed in, must be ''Enabled'' or ''Disabled'' - type: string + restrictOutboundNetworkAccess adx.control.models.ClusterProperties_1RestrictOutboundNetworkAccessEnum { adx.control.JSONMapper.fieldName(restrictOutboundNetworkAccess,"restrictOutboundNetworkAccess") } + % allowedFqdnList - List of allowed FQDNs(Fully Qualified Domain Name) for egress from Cluster. - type: array of string + allowedFqdnList string { adx.control.JSONMapper.fieldName(allowedFqdnList,"allowedFqdnList"), adx.control.JSONMapper.JSONArray } + % publicIPType - Indicates what public IP type to create - IPv4 (default), or DualStack (both IPv4 and IPv6) - type: string + publicIPType adx.control.models.ClusterProperties_1PublicIPTypeEnum { adx.control.JSONMapper.fieldName(publicIPType,"publicIPType") } + % virtualClusterGraduationProperties - Virtual Cluster graduation properties - type: string + virtualClusterGraduationProperties string { adx.control.JSONMapper.fieldName(virtualClusterGraduationProperties,"virtualClusterGraduationProperties") } + % privateEndpointConnections - A list of private endpoint connections. - type: array of PrivateEndpointConnection + privateEndpointConnections adx.control.models.PrivateEndpointConnection { adx.control.JSONMapper.fieldName(privateEndpointConnections,"privateEndpointConnections"), adx.control.JSONMapper.JSONArray } + % migrationCluster - type: MigrationClusterProperties + migrationCluster { adx.control.JSONMapper.fieldName(migrationCluster,"migrationCluster") } + end + + % Class methods + methods + % Constructor + function obj = ClusterProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1EngineTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1EngineTypeEnum.m new file mode 100644 index 0000000..da2f07e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1EngineTypeEnum.m @@ -0,0 +1,15 @@ +classdef ClusterProperties_1EngineTypeEnum < adx.control.JSONEnum +% ClusterProperties_1EngineTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + V2 ("V2") + V3 ("V3") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicIPTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicIPTypeEnum.m new file mode 100644 index 0000000..de35d17 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicIPTypeEnum.m @@ -0,0 +1,15 @@ +classdef ClusterProperties_1PublicIPTypeEnum < adx.control.JSONEnum +% ClusterProperties_1PublicIPTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + IPv4 ("IPv4") + DualStack ("DualStack") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicNetworkAccessEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicNetworkAccessEnum.m new file mode 100644 index 0000000..932dd6d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1PublicNetworkAccessEnum.m @@ -0,0 +1,15 @@ +classdef ClusterProperties_1PublicNetworkAccessEnum < adx.control.JSONEnum +% ClusterProperties_1PublicNetworkAccessEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Enabled ("Enabled") + Disabled ("Disabled") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1RestrictOutboundNetworkAccessEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1RestrictOutboundNetworkAccessEnum.m new file mode 100644 index 0000000..b7bd4e9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1RestrictOutboundNetworkAccessEnum.m @@ -0,0 +1,15 @@ +classdef ClusterProperties_1RestrictOutboundNetworkAccessEnum < adx.control.JSONEnum +% ClusterProperties_1RestrictOutboundNetworkAccessEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Enabled ("Enabled") + Disabled ("Disabled") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1StateEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1StateEnum.m new file mode 100644 index 0000000..4e32451 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterProperties_1StateEnum.m @@ -0,0 +1,23 @@ +classdef ClusterProperties_1StateEnum < adx.control.JSONEnum +% ClusterProperties_1StateEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Creating ("Creating") + Unavailable ("Unavailable") + Running ("Running") + Deleting ("Deleting") + Deleted ("Deleted") + Stopping ("Stopping") + Stopped ("Stopped") + Starting ("Starting") + Updating ("Updating") + Migrated ("Migrated") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ClusterUpdate.m b/Software/MATLAB/app/system/+adx/+control/+models/ClusterUpdate.m new file mode 100644 index 0000000..eafb0b1 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ClusterUpdate.m @@ -0,0 +1,55 @@ +classdef ClusterUpdate < adx.control.JSONMapper +% ClusterUpdate Class representing an update to a Kusto cluster. +% +% ClusterUpdate Properties: +% tags - Resource tags. - type: adx.control.JSONMapperMap +% location - Resource location. - type: string +% sku - type: AzureSku +% identity - type: Identity +% xproperties - type: ClusterProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % tags - Resource tags. - type: adx.control.JSONMapperMap + tags adx.control.JSONMapperMap { adx.control.JSONMapper.fieldName(tags,"tags") } + % location - Resource location. - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % sku - type: AzureSku + sku adx.control.models.AzureSku { adx.control.JSONMapper.fieldName(sku,"sku") } + % identity - type: Identity + identity adx.control.models.Identity { adx.control.JSONMapper.fieldName(identity,"identity") } + % xproperties - type: ClusterProperties_1 + xproperties adx.control.models.ClusterProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ClusterUpdate(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ClusterUpdate + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Compression.m b/Software/MATLAB/app/system/+adx/+control/+models/Compression.m new file mode 100644 index 0000000..ecc982c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Compression.m @@ -0,0 +1,15 @@ +classdef Compression < adx.control.JSONEnum +% Compression The compression type + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + None ("None") + GZip ("GZip") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnection.m new file mode 100644 index 0000000..327c6db --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnection.m @@ -0,0 +1,43 @@ +classdef CosmosDbDataConnection < adx.control.JSONMapper +% CosmosDbDataConnection Class representing a CosmosDb data connection. +% +% CosmosDbDataConnection Properties: +% xproperties - type: CosmosDbDataConnectionProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: CosmosDbDataConnectionProperties_1 + xproperties adx.control.models.CosmosDbDataConnectionProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = CosmosDbDataConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.CosmosDbDataConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties.m new file mode 100644 index 0000000..dedc250 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties.m @@ -0,0 +1,58 @@ +classdef CosmosDbDataConnectionProperties < adx.control.JSONMapper +% CosmosDbDataConnectionProperties Class representing the Kusto CosmosDb data connection properties. +% +% CosmosDbDataConnectionProperties Properties: +% tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string +% mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string +% managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string +% managedIdentityObjectId - The object ID of the managed identity resource. - type: string +% cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string +% cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string +% cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string +% retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of the managed identity resource. - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbAccountResourceId string { adx.control.JSONMapper.fieldName(cosmosDbAccountResourceId,"cosmosDbAccountResourceId") } + % cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbDatabase string { adx.control.JSONMapper.fieldName(cosmosDbDatabase,"cosmosDbDatabase") } + % cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + cosmosDbContainer string { adx.control.JSONMapper.fieldName(cosmosDbContainer,"cosmosDbContainer") } + % retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = CosmosDbDataConnectionProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.CosmosDbDataConnectionProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties_1.m new file mode 100644 index 0000000..6211c1c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/CosmosDbDataConnectionProperties_1.m @@ -0,0 +1,58 @@ +classdef CosmosDbDataConnectionProperties_1 < adx.control.JSONMapper +% CosmosDbDataConnectionProperties_1 Class representing the Kusto CosmosDb data connection properties. +% +% CosmosDbDataConnectionProperties_1 Properties: +% tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string +% mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string +% managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string +% managedIdentityObjectId - The object ID of the managed identity resource. - type: string +% cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string +% cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string +% cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string +% retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % tableName - The case-sensitive name of the existing target table in your cluster. Retrieved data is ingested into this table. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The name of an existing mapping rule to use when ingesting the retrieved data. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % managedIdentityResourceId - The resource ID of a managed system or user-assigned identity. The identity is used to authenticate with Cosmos DB. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of the managed identity resource. - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % cosmosDbAccountResourceId - The resource ID of the Cosmos DB account used to create the data connection. - type: string + cosmosDbAccountResourceId string { adx.control.JSONMapper.fieldName(cosmosDbAccountResourceId,"cosmosDbAccountResourceId") } + % cosmosDbDatabase - The name of an existing database in the Cosmos DB account. - type: string + cosmosDbDatabase string { adx.control.JSONMapper.fieldName(cosmosDbDatabase,"cosmosDbDatabase") } + % cosmosDbContainer - The name of an existing container in the Cosmos DB database. - type: string + cosmosDbContainer string { adx.control.JSONMapper.fieldName(cosmosDbContainer,"cosmosDbContainer") } + % retrievalStartDate - Optional. If defined, the data connection retrieves Cosmos DB documents created or updated after the specified retrieval start date. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = CosmosDbDataConnectionProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.CosmosDbDataConnectionProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnection.m new file mode 100644 index 0000000..0e8ace7 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnection.m @@ -0,0 +1,46 @@ +classdef DataConnection < adx.control.JSONMapper +% DataConnection Class representing an data connection. +% +% DataConnection Properties: +% location - Resource location. - type: string +% kind - Kind of the endpoint for the data connection - type: string +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % location - Resource location. - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % kind - Kind of the endpoint for the data connection - type: string + kind adx.control.models.DataConnectionKindEnum { adx.control.JSONMapper.fieldName(kind,"kind") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = DataConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequest.m new file mode 100644 index 0000000..7693530 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef DataConnectionCheckNameRequest < adx.control.JSONMapper +% DataConnectionCheckNameRequest A data connection check name availability request. +% +% DataConnectionCheckNameRequest Properties: +% name - Data Connection name. - type: string +% type - The type of resource, Microsoft.Kusto/clusters/databases/dataConnections. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Data Connection name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, Microsoft.Kusto/clusters/databases/dataConnections. - type: string + type adx.control.models.DataConnectionCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = DataConnectionCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnectionCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..4cf5dcd --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef DataConnectionCheckNameRequestTypeEnum < adx.control.JSONEnum +% DataConnectionCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_databases_dataConnections ("Microsoft.Kusto/clusters/databases/dataConnections") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionKindEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionKindEnum.m new file mode 100644 index 0000000..dd03086 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionKindEnum.m @@ -0,0 +1,17 @@ +classdef DataConnectionKindEnum < adx.control.JSONEnum +% DataConnectionKindEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + EventHub ("EventHub") + EventGrid ("EventGrid") + IotHub ("IotHub") + CosmosDb ("CosmosDb") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionListResult.m new file mode 100644 index 0000000..e6b4aed --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionListResult.m @@ -0,0 +1,34 @@ +classdef DataConnectionListResult < adx.control.JSONMapper +% DataConnectionListResult The list Kusto data connections operation response. +% +% DataConnectionListResult Properties: +% value - The list of Kusto data connections. - type: array of DataConnection + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto data connections. - type: array of DataConnection + value adx.control.models.DataConnection { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DataConnectionListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnectionListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidation.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidation.m new file mode 100644 index 0000000..a9c23c0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidation.m @@ -0,0 +1,37 @@ +classdef DataConnectionValidation < adx.control.JSONMapper +% DataConnectionValidation Class representing an data connection validation. +% +% DataConnectionValidation Properties: +% dataConnectionName - The name of the data connection. - type: string +% xproperties - type: DataConnection + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % dataConnectionName - The name of the data connection. - type: string + dataConnectionName string { adx.control.JSONMapper.fieldName(dataConnectionName,"dataConnectionName") } + % xproperties - type: DataConnection + xproperties adx.control.models.DataConnection { adx.control.JSONMapper.fieldName(xproperties,"properties") } + end + + % Class methods + methods + % Constructor + function obj = DataConnectionValidation(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnectionValidation + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationListResult.m new file mode 100644 index 0000000..04e2c45 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationListResult.m @@ -0,0 +1,34 @@ +classdef DataConnectionValidationListResult < adx.control.JSONMapper +% DataConnectionValidationListResult The list Kusto data connection validation result. +% +% DataConnectionValidationListResult Properties: +% value - The list of Kusto data connection validation errors. - type: array of DataConnectionValidationResult + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto data connection validation errors. - type: array of DataConnectionValidationResult + value adx.control.models.DataConnectionValidationResult { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DataConnectionValidationListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnectionValidationListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationResult.m new file mode 100644 index 0000000..dd0ca1f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DataConnectionValidationResult.m @@ -0,0 +1,34 @@ +classdef DataConnectionValidationResult < adx.control.JSONMapper +% DataConnectionValidationResult The result returned from a data connection validation request. +% +% DataConnectionValidationResult Properties: +% errorMessage - A message which indicates a problem in data connection validation. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % errorMessage - A message which indicates a problem in data connection validation. - type: string + errorMessage string { adx.control.JSONMapper.fieldName(errorMessage,"errorMessage") } + end + + % Class methods + methods + % Constructor + function obj = DataConnectionValidationResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DataConnectionValidationResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Database.m b/Software/MATLAB/app/system/+adx/+control/+models/Database.m new file mode 100644 index 0000000..9c8e240 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Database.m @@ -0,0 +1,46 @@ +classdef Database < adx.control.JSONMapper +% Database Class representing a Kusto database. +% +% Database Properties: +% location - Resource location. - type: string +% kind - Kind of the database - type: string +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % location - Resource location. - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % kind - Kind of the database - type: string + kind adx.control.models.DatabaseKindEnum { adx.control.JSONMapper.fieldName(kind,"kind") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = Database(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Database + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerRequest.m new file mode 100644 index 0000000..5874718 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerRequest.m @@ -0,0 +1,37 @@ +classdef DatabaseInviteFollowerRequest < adx.control.JSONMapper +% DatabaseInviteFollowerRequest The request to invite a follower to a database. +% +% DatabaseInviteFollowerRequest Properties: +% inviteeEmail - The email of the invited user for which the follower invitation is generated. - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % inviteeEmail - The email of the invited user for which the follower invitation is generated. - type: string + inviteeEmail string { adx.control.JSONMapper.fieldName(inviteeEmail,"inviteeEmail") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + end + + % Class methods + methods + % Constructor + function obj = DatabaseInviteFollowerRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabaseInviteFollowerRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerResult.m new file mode 100644 index 0000000..6a6969f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseInviteFollowerResult.m @@ -0,0 +1,34 @@ +classdef DatabaseInviteFollowerResult < adx.control.JSONMapper +% DatabaseInviteFollowerResult The result returned from a follower invitation generation request. +% +% DatabaseInviteFollowerResult Properties: +% generatedInvitation - The generated invitation token. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % generatedInvitation - The generated invitation token. - type: string + generatedInvitation string { adx.control.JSONMapper.fieldName(generatedInvitation,"generatedInvitation") } + end + + % Class methods + methods + % Constructor + function obj = DatabaseInviteFollowerResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabaseInviteFollowerResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseKindEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseKindEnum.m new file mode 100644 index 0000000..81fed12 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseKindEnum.m @@ -0,0 +1,15 @@ +classdef DatabaseKindEnum < adx.control.JSONEnum +% DatabaseKindEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + ReadWrite ("ReadWrite") + ReadOnlyFollowing ("ReadOnlyFollowing") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseListResult.m new file mode 100644 index 0000000..0bc278c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseListResult.m @@ -0,0 +1,37 @@ +classdef DatabaseListResult < adx.control.JSONMapper +% DatabaseListResult The list Kusto databases operation response. +% +% DatabaseListResult Properties: +% nextLink - Link to the next page of results - type: string +% value - The list of Kusto databases. - type: array of Database + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % nextLink - Link to the next page of results - type: string + nextLink string { adx.control.JSONMapper.fieldName(nextLink,"nextLink") } + % value - The list of Kusto databases. - type: array of Database + value adx.control.models.Database { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DatabaseListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabaseListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipal.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipal.m new file mode 100644 index 0000000..97f7a45 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipal.m @@ -0,0 +1,52 @@ +classdef DatabasePrincipal < adx.control.JSONMapper +% DatabasePrincipal A class representing database principal entity. +% +% DatabasePrincipal Properties: +% role - Database principal role. - type: string +% name - Database principal name. - type: string +% type - Database principal type. - type: string +% fqn - Database principal fully qualified name. - type: string +% email - Database principal email if exists. - type: string +% appId - Application id - relevant only for application principal type. - type: string +% tenantName - The tenant name of the principal - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % role - Database principal role. - type: string + role adx.control.models.DatabasePrincipalRoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + % name - Database principal name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - Database principal type. - type: string + type adx.control.models.DatabasePrincipalTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + % fqn - Database principal fully qualified name. - type: string + fqn string { adx.control.JSONMapper.fieldName(fqn,"fqn") } + % email - Database principal email if exists. - type: string + email string { adx.control.JSONMapper.fieldName(email,"email") } + % appId - Application id - relevant only for application principal type. - type: string + appId string { adx.control.JSONMapper.fieldName(appId,"appId") } + % tenantName - The tenant name of the principal - type: string + tenantName string { adx.control.JSONMapper.fieldName(tenantName,"tenantName") } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipal(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipal + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignment.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignment.m new file mode 100644 index 0000000..8911ce2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignment.m @@ -0,0 +1,43 @@ +classdef DatabasePrincipalAssignment < adx.control.JSONMapper +% DatabasePrincipalAssignment Class representing a database principal assignment. +% +% DatabasePrincipalAssignment Properties: +% xproperties - type: DatabasePrincipalProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: DatabasePrincipalProperties_1 + xproperties adx.control.models.DatabasePrincipalProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalAssignment(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalAssignment + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequest.m new file mode 100644 index 0000000..d8b3fbd --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef DatabasePrincipalAssignmentCheckNameRequest < adx.control.JSONMapper +% DatabasePrincipalAssignmentCheckNameRequest A principal assignment check name availability request. +% +% DatabasePrincipalAssignmentCheckNameRequest Properties: +% name - Principal Assignment resource name. - type: string +% type - The type of resource, Microsoft.Kusto/clusters/databases/principalAssignments. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Principal Assignment resource name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, Microsoft.Kusto/clusters/databases/principalAssignments. - type: string + type adx.control.models.DatabasePrincipalAssignmentCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalAssignmentCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalAssignmentCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..317077a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef DatabasePrincipalAssignmentCheckNameRequestTypeEnum < adx.control.JSONEnum +% DatabasePrincipalAssignmentCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_databases_principalAssignments ("Microsoft.Kusto/clusters/databases/principalAssignments") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentListResult.m new file mode 100644 index 0000000..99e1105 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalAssignmentListResult.m @@ -0,0 +1,34 @@ +classdef DatabasePrincipalAssignmentListResult < adx.control.JSONMapper +% DatabasePrincipalAssignmentListResult The list Kusto database principal assignments operation response. +% +% DatabasePrincipalAssignmentListResult Properties: +% value - The list of Kusto database principal assignments. - type: array of DatabasePrincipalAssignment + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto database principal assignments. - type: array of DatabasePrincipalAssignment + value adx.control.models.DatabasePrincipalAssignment { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalAssignmentListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalAssignmentListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListRequest.m new file mode 100644 index 0000000..a10c2d6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListRequest.m @@ -0,0 +1,34 @@ +classdef DatabasePrincipalListRequest < adx.control.JSONMapper +% DatabasePrincipalListRequest The list Kusto database principals operation request. +% +% DatabasePrincipalListRequest Properties: +% value - The list of Kusto database principals. - type: array of DatabasePrincipal + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto database principals. - type: array of DatabasePrincipal + value adx.control.models.DatabasePrincipal { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalListRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalListRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListResult.m new file mode 100644 index 0000000..8c01a08 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalListResult.m @@ -0,0 +1,34 @@ +classdef DatabasePrincipalListResult < adx.control.JSONMapper +% DatabasePrincipalListResult The list Kusto database principals operation response. +% +% DatabasePrincipalListResult Properties: +% value - The list of Kusto database principals. - type: array of DatabasePrincipal + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto database principals. - type: array of DatabasePrincipal + value adx.control.models.DatabasePrincipal { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties.m new file mode 100644 index 0000000..1c6bf28 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties.m @@ -0,0 +1,55 @@ +classdef DatabasePrincipalProperties < adx.control.JSONMapper +% DatabasePrincipalProperties A class representing database principal property. +% +% DatabasePrincipalProperties Properties: +% principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string +% role - Database principal role. - type: string +% tenantId - The tenant id of the principal - type: string +% principalType - Principal type. - type: string +% tenantName - The tenant name of the principal - type: string +% principalName - The principal name - type: string +% provisioningState - type: ProvisioningState +% aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % role - Database principal role. - type: string + role adx.control.models.DatabasePrincipalPropertiesRoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + % tenantId - The tenant id of the principal - type: string + tenantId string { adx.control.JSONMapper.fieldName(tenantId,"tenantId") } + % principalType - Principal type. - type: string + principalType adx.control.models.DatabasePrincipalPropertiesPrincipalTypeEnum { adx.control.JSONMapper.fieldName(principalType,"principalType") } + % tenantName - The tenant name of the principal - type: string + tenantName string { adx.control.JSONMapper.fieldName(tenantName,"tenantName") } + % principalName - The principal name - type: string + principalName string { adx.control.JSONMapper.fieldName(principalName,"principalName") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + aadObjectId string { adx.control.JSONMapper.fieldName(aadObjectId,"aadObjectId") } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesPrincipalTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesPrincipalTypeEnum.m new file mode 100644 index 0000000..4cabe1d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesPrincipalTypeEnum.m @@ -0,0 +1,16 @@ +classdef DatabasePrincipalPropertiesPrincipalTypeEnum < adx.control.JSONEnum +% DatabasePrincipalPropertiesPrincipalTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + App ("App") + Group ("Group") + User ("User") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesRoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesRoleEnum.m new file mode 100644 index 0000000..945dbe1 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalPropertiesRoleEnum.m @@ -0,0 +1,19 @@ +classdef DatabasePrincipalPropertiesRoleEnum < adx.control.JSONEnum +% DatabasePrincipalPropertiesRoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Admin ("Admin") + Ingestor ("Ingestor") + Monitor ("Monitor") + User ("User") + UnrestrictedViewer ("UnrestrictedViewer") + Viewer ("Viewer") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1.m new file mode 100644 index 0000000..62501f4 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1.m @@ -0,0 +1,55 @@ +classdef DatabasePrincipalProperties_1 < adx.control.JSONMapper +% DatabasePrincipalProperties_1 A class representing database principal property. +% +% DatabasePrincipalProperties_1 Properties: +% principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string +% role - Database principal role. - type: string +% tenantId - The tenant id of the principal - type: string +% principalType - Principal type. - type: string +% tenantName - The tenant name of the principal - type: string +% principalName - The principal name - type: string +% provisioningState - type: ProvisioningState +% aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal ID assigned to the database principal. It can be a user email, application ID, or security group name. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % role - Database principal role. - type: string + role adx.control.models.DatabasePrincipalProperties_1RoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + % tenantId - The tenant id of the principal - type: string + tenantId string { adx.control.JSONMapper.fieldName(tenantId,"tenantId") } + % principalType - Principal type. - type: string + principalType adx.control.models.DatabasePrincipalProperties_1PrincipalTypeEnum { adx.control.JSONMapper.fieldName(principalType,"principalType") } + % tenantName - The tenant name of the principal - type: string + tenantName string { adx.control.JSONMapper.fieldName(tenantName,"tenantName") } + % principalName - The principal name - type: string + principalName string { adx.control.JSONMapper.fieldName(principalName,"principalName") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % aadObjectId - The service principal object id in AAD (Azure active directory) - type: string + aadObjectId string { adx.control.JSONMapper.fieldName(aadObjectId,"aadObjectId") } + end + + % Class methods + methods + % Constructor + function obj = DatabasePrincipalProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabasePrincipalProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1PrincipalTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1PrincipalTypeEnum.m new file mode 100644 index 0000000..8c224fa --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1PrincipalTypeEnum.m @@ -0,0 +1,16 @@ +classdef DatabasePrincipalProperties_1PrincipalTypeEnum < adx.control.JSONEnum +% DatabasePrincipalProperties_1PrincipalTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + App ("App") + Group ("Group") + User ("User") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1RoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1RoleEnum.m new file mode 100644 index 0000000..e26621c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalProperties_1RoleEnum.m @@ -0,0 +1,19 @@ +classdef DatabasePrincipalProperties_1RoleEnum < adx.control.JSONEnum +% DatabasePrincipalProperties_1RoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Admin ("Admin") + Ingestor ("Ingestor") + Monitor ("Monitor") + User ("User") + UnrestrictedViewer ("UnrestrictedViewer") + Viewer ("Viewer") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalRoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalRoleEnum.m new file mode 100644 index 0000000..d2e51d7 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalRoleEnum.m @@ -0,0 +1,19 @@ +classdef DatabasePrincipalRoleEnum < adx.control.JSONEnum +% DatabasePrincipalRoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Admin ("Admin") + Ingestor ("Ingestor") + Monitor ("Monitor") + User ("User") + UnrestrictedViewer ("UnrestrictedViewer") + Viewer ("Viewer") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalTypeEnum.m new file mode 100644 index 0000000..26795d0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabasePrincipalTypeEnum.m @@ -0,0 +1,16 @@ +classdef DatabasePrincipalTypeEnum < adx.control.JSONEnum +% DatabasePrincipalTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + App ("App") + Group ("Group") + User ("User") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseShareOrigin.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseShareOrigin.m new file mode 100644 index 0000000..72f4912 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseShareOrigin.m @@ -0,0 +1,16 @@ +classdef DatabaseShareOrigin < adx.control.JSONEnum +% DatabaseShareOrigin The origin of the following setup. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Direct ("Direct") + DataShare ("DataShare") + Other ("Other") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DatabaseStatistics.m b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseStatistics.m new file mode 100644 index 0000000..e4a6ced --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DatabaseStatistics.m @@ -0,0 +1,34 @@ +classdef DatabaseStatistics < adx.control.JSONMapper +% DatabaseStatistics A class that contains database statistics information. +% +% DatabaseStatistics Properties: +% size - The database size - the total size of compressed data and index in bytes. - type: double + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % size - The database size - the total size of compressed data and index in bytes. - type: double + size double { adx.control.JSONMapper.fieldName(size,"size") } + end + + % Class methods + methods + % Constructor + function obj = DatabaseStatistics(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DatabaseStatistics + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/DiagnoseVirtualNetworkResult.m b/Software/MATLAB/app/system/+adx/+control/+models/DiagnoseVirtualNetworkResult.m new file mode 100644 index 0000000..36cc523 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/DiagnoseVirtualNetworkResult.m @@ -0,0 +1,34 @@ +classdef DiagnoseVirtualNetworkResult < adx.control.JSONMapper +% DiagnoseVirtualNetworkResult No description provided +% +% DiagnoseVirtualNetworkResult Properties: +% findings - The list of network connectivity diagnostic finding - type: array of string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % findings - The list of network connectivity diagnostic finding - type: array of string + findings string { adx.control.JSONMapper.fieldName(findings,"findings"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = DiagnoseVirtualNetworkResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.DiagnoseVirtualNetworkResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EndpointDependency.m b/Software/MATLAB/app/system/+adx/+control/+models/EndpointDependency.m new file mode 100644 index 0000000..3e908c0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EndpointDependency.m @@ -0,0 +1,37 @@ +classdef EndpointDependency < adx.control.JSONMapper +% EndpointDependency A domain name that a service is reached at, including details of the current connection status. +% +% EndpointDependency Properties: +% domainName - The domain name of the dependency. - type: string +% endpointDetails - The ports used when connecting to DomainName. - type: array of EndpointDetail + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % domainName - The domain name of the dependency. - type: string + domainName string { adx.control.JSONMapper.fieldName(domainName,"domainName") } + % endpointDetails - The ports used when connecting to DomainName. - type: array of EndpointDetail + endpointDetails adx.control.models.EndpointDetail { adx.control.JSONMapper.fieldName(endpointDetails,"endpointDetails"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = EndpointDependency(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EndpointDependency + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EndpointDetail.m b/Software/MATLAB/app/system/+adx/+control/+models/EndpointDetail.m new file mode 100644 index 0000000..314e6fc --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EndpointDetail.m @@ -0,0 +1,34 @@ +classdef EndpointDetail < adx.control.JSONMapper +% EndpointDetail Current TCP connectivity information from the Kusto cluster to a single endpoint. +% +% EndpointDetail Properties: +% port - The port an endpoint is connected to. - type: int32 + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % port - The port an endpoint is connected to. - type: int32 + port int32 { adx.control.JSONMapper.fieldName(port,"port") } + end + + % Class methods + methods + % Constructor + function obj = EndpointDetail(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EndpointDetail + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ErrorAdditionalInfo.m b/Software/MATLAB/app/system/+adx/+control/+models/ErrorAdditionalInfo.m new file mode 100644 index 0000000..a20c074 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ErrorAdditionalInfo.m @@ -0,0 +1,45 @@ +classdef ErrorAdditionalInfo < adx.control.JSONMapper +% ErrorAdditionalInfo The resource management error additional info. +% +% ErrorAdditionalInfo Properties: +% type - The additional info type. - type: string +% info - The additional info. - type: object + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % type - The additional info type. - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + % info - The additional info. - type: object + info { adx.control.JSONMapper.fieldName(info,"info") } + end + + % Class methods + methods + % Constructor + function obj = ErrorAdditionalInfo(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ErrorAdditionalInfo + end + obj@adx.control.JSONMapper(s,inputs); + end + + function disp(obj, options) + arguments + obj (1,1) adx.control.models.ErrorAdditionalInfo + options.prefix string {mustBeTextScalar} = "" + end + mathworks.internal.adx.dispErrorAdditionalInfo(obj, prefix=options.prefix); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ErrorDetail.m b/Software/MATLAB/app/system/+adx/+control/+models/ErrorDetail.m new file mode 100644 index 0000000..6e26d2b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ErrorDetail.m @@ -0,0 +1,56 @@ +classdef ErrorDetail < adx.control.JSONMapper +% ErrorDetail The error detail. +% +% ErrorDetail Properties: +% code - The error code. - type: string +% message - The error message. - type: string +% target - The error target. - type: string +% details - The error details. - type: array of ErrorDetail +% additionalInfo - The error additional info. - type: array of ErrorAdditionalInfo + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % code - The error code. - type: string + code string { adx.control.JSONMapper.fieldName(code,"code") } + % message - The error message. - type: string + message string { adx.control.JSONMapper.fieldName(message,"message") } + % target - The error target. - type: string + target string { adx.control.JSONMapper.fieldName(target,"target") } + % details - The error details. - type: array of ErrorDetail + details adx.control.models.ErrorDetail { adx.control.JSONMapper.fieldName(details,"details"), adx.control.JSONMapper.JSONArray } + % additionalInfo - The error additional info. - type: array of ErrorAdditionalInfo + additionalInfo adx.control.models.ErrorAdditionalInfo { adx.control.JSONMapper.fieldName(additionalInfo,"additionalInfo"), adx.control.JSONMapper.JSONArray } + % Error context data, can be returned by query - (Manually Added) + context { adx.control.JSONMapper.fieldName(context,"@context") } + end + + % Class methods + methods + % Constructor + function obj = ErrorDetail(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ErrorDetail + end + obj@adx.control.JSONMapper(s,inputs); + end + + function disp(obj, options) + arguments + obj (1,1) adx.control.models.ErrorDetail + options.prefix string {mustBeTextScalar} = "" + end + mathworks.internal.adx.dispErrorDetails(obj, prefix=options.prefix); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ErrorResponse.m b/Software/MATLAB/app/system/+adx/+control/+models/ErrorResponse.m new file mode 100644 index 0000000..8af4f7d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ErrorResponse.m @@ -0,0 +1,42 @@ +classdef ErrorResponse < adx.control.JSONMapper +% ErrorResponse Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.). +% +% ErrorResponse Properties: +% error - type: ErrorDetail + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % error - type: ErrorDetail + error adx.control.models.ErrorDetail { adx.control.JSONMapper.fieldName(error,"error") } + end + + % Class methods + methods + % Constructor + function obj = ErrorResponse(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ErrorResponse + end + obj@adx.control.JSONMapper(s,inputs); + end + + function disp(obj, options) + arguments + obj (1,1) adx.control.models.ErrorResponse + options.prefix string {mustBeTextScalar} = "" + end + mathworks.internal.adx.dispErrorResponse(obj, prefix=options.prefix); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties.m new file mode 100644 index 0000000..2e96deb --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties.m @@ -0,0 +1,70 @@ +classdef EventGridConnectionProperties < adx.control.JSONMapper +% EventGridConnectionProperties Class representing the Kusto event grid connection properties. +% +% EventGridConnectionProperties Properties: +% storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string +% eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string +% eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string +% consumerGroup - The event hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: EventGridDataFormat +% ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical +% blobStorageEventType - type: BlobStorageEventType +% managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string +% managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + storageAccountResourceId string { adx.control.JSONMapper.fieldName(storageAccountResourceId,"storageAccountResourceId") } + % eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventGridResourceId string { adx.control.JSONMapper.fieldName(eventGridResourceId,"eventGridResourceId") } + % eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + eventHubResourceId string { adx.control.JSONMapper.fieldName(eventHubResourceId,"eventHubResourceId") } + % consumerGroup - The event hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: EventGridDataFormat + dataFormat adx.control.models.EventGridDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + ignoreFirstRecord logical { adx.control.JSONMapper.fieldName(ignoreFirstRecord,"ignoreFirstRecord") } + % blobStorageEventType - type: BlobStorageEventType + blobStorageEventType adx.control.models.BlobStorageEventType { adx.control.JSONMapper.fieldName(blobStorageEventType,"blobStorageEventType") } + % managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.EventGridConnectionPropertiesDatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = EventGridConnectionProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventGridConnectionProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionPropertiesDatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionPropertiesDatabaseRoutingEnum.m new file mode 100644 index 0000000..80bb7dd --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionPropertiesDatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef EventGridConnectionPropertiesDatabaseRoutingEnum < adx.control.JSONEnum +% EventGridConnectionPropertiesDatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1.m new file mode 100644 index 0000000..443f44f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1.m @@ -0,0 +1,70 @@ +classdef EventGridConnectionProperties_1 < adx.control.JSONMapper +% EventGridConnectionProperties_1 Class representing the Kusto event grid connection properties. +% +% EventGridConnectionProperties_1 Properties: +% storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string +% eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string +% eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string +% consumerGroup - The event hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: EventGridDataFormat +% ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical +% blobStorageEventType - type: BlobStorageEventType +% managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string +% managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % storageAccountResourceId - The resource ID of the storage account where the data resides. - type: string + storageAccountResourceId string { adx.control.JSONMapper.fieldName(storageAccountResourceId,"storageAccountResourceId") } + % eventGridResourceId - The resource ID of the event grid that is subscribed to the storage account events. - type: string + eventGridResourceId string { adx.control.JSONMapper.fieldName(eventGridResourceId,"eventGridResourceId") } + % eventHubResourceId - The resource ID where the event grid is configured to send events. - type: string + eventHubResourceId string { adx.control.JSONMapper.fieldName(eventHubResourceId,"eventHubResourceId") } + % consumerGroup - The event hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: EventGridDataFormat + dataFormat adx.control.models.EventGridDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % ignoreFirstRecord - A Boolean value that, if set to true, indicates that ingestion should ignore the first record of every file - type: logical + ignoreFirstRecord logical { adx.control.JSONMapper.fieldName(ignoreFirstRecord,"ignoreFirstRecord") } + % blobStorageEventType - type: BlobStorageEventType + blobStorageEventType adx.control.models.BlobStorageEventType { adx.control.JSONMapper.fieldName(blobStorageEventType,"blobStorageEventType") } + % managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub and storage account. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of managedIdentityResourceId - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.EventGridConnectionProperties_1DatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = EventGridConnectionProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventGridConnectionProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1DatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1DatabaseRoutingEnum.m new file mode 100644 index 0000000..7a816cf --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridConnectionProperties_1DatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef EventGridConnectionProperties_1DatabaseRoutingEnum < adx.control.JSONEnum +% EventGridConnectionProperties_1DatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataConnection.m new file mode 100644 index 0000000..6077a57 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataConnection.m @@ -0,0 +1,43 @@ +classdef EventGridDataConnection < adx.control.JSONMapper +% EventGridDataConnection Class representing an Event Grid data connection. +% +% EventGridDataConnection Properties: +% xproperties - type: EventGridConnectionProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: EventGridConnectionProperties_1 + xproperties adx.control.models.EventGridConnectionProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = EventGridDataConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventGridDataConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataFormat.m b/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataFormat.m new file mode 100644 index 0000000..99f73a5 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventGridDataFormat.m @@ -0,0 +1,29 @@ +classdef EventGridDataFormat < adx.control.JSONEnum +% EventGridDataFormat The data format of the message. Optionally the data format can be added to each message. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + MULTIJSON ("MULTIJSON") + JSON ("JSON") + CSV ("CSV") + TSV ("TSV") + SCSV ("SCSV") + SOHSV ("SOHSV") + PSV ("PSV") + TXT ("TXT") + RAW ("RAW") + SINGLEJSON ("SINGLEJSON") + AVRO ("AVRO") + TSVE ("TSVE") + PARQUET ("PARQUET") + ORC ("ORC") + APACHEAVRO ("APACHEAVRO") + W3CLOGFILE ("W3CLOGFILE") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties.m new file mode 100644 index 0000000..88c8306 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties.m @@ -0,0 +1,67 @@ +classdef EventHubConnectionProperties < adx.control.JSONMapper +% EventHubConnectionProperties Class representing the Kusto event hub connection properties. +% +% EventHubConnectionProperties Properties: +% eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string +% consumerGroup - The event hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: EventHubDataFormat +% eventSystemProperties - System properties of the event hub - type: array of string +% compression - type: Compression +% provisioningState - type: ProvisioningState +% managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string +% managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + eventHubResourceId string { adx.control.JSONMapper.fieldName(eventHubResourceId,"eventHubResourceId") } + % consumerGroup - The event hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: EventHubDataFormat + dataFormat adx.control.models.EventHubDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % eventSystemProperties - System properties of the event hub - type: array of string + eventSystemProperties string { adx.control.JSONMapper.fieldName(eventSystemProperties,"eventSystemProperties"), adx.control.JSONMapper.JSONArray } + % compression - type: Compression + compression adx.control.models.Compression { adx.control.JSONMapper.fieldName(compression,"compression") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.EventHubConnectionPropertiesDatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + end + + % Class methods + methods + % Constructor + function obj = EventHubConnectionProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventHubConnectionProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionPropertiesDatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionPropertiesDatabaseRoutingEnum.m new file mode 100644 index 0000000..2c7f757 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionPropertiesDatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef EventHubConnectionPropertiesDatabaseRoutingEnum < adx.control.JSONEnum +% EventHubConnectionPropertiesDatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1.m new file mode 100644 index 0000000..b0445c6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1.m @@ -0,0 +1,67 @@ +classdef EventHubConnectionProperties_1 < adx.control.JSONMapper +% EventHubConnectionProperties_1 Class representing the Kusto event hub connection properties. +% +% EventHubConnectionProperties_1 Properties: +% eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string +% consumerGroup - The event hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: EventHubDataFormat +% eventSystemProperties - System properties of the event hub - type: array of string +% compression - type: Compression +% provisioningState - type: ProvisioningState +% managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string +% managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % eventHubResourceId - The resource ID of the event hub to be used to create a data connection. - type: string + eventHubResourceId string { adx.control.JSONMapper.fieldName(eventHubResourceId,"eventHubResourceId") } + % consumerGroup - The event hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: EventHubDataFormat + dataFormat adx.control.models.EventHubDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % eventSystemProperties - System properties of the event hub - type: array of string + eventSystemProperties string { adx.control.JSONMapper.fieldName(eventSystemProperties,"eventSystemProperties"), adx.control.JSONMapper.JSONArray } + % compression - type: Compression + compression adx.control.models.Compression { adx.control.JSONMapper.fieldName(compression,"compression") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % managedIdentityResourceId - The resource ID of a managed identity (system or user assigned) to be used to authenticate with event hub. - type: string + managedIdentityResourceId string { adx.control.JSONMapper.fieldName(managedIdentityResourceId,"managedIdentityResourceId") } + % managedIdentityObjectId - The object ID of the managedIdentityResourceId - type: string + managedIdentityObjectId string { adx.control.JSONMapper.fieldName(managedIdentityObjectId,"managedIdentityObjectId") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.EventHubConnectionProperties_1DatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + end + + % Class methods + methods + % Constructor + function obj = EventHubConnectionProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventHubConnectionProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1DatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1DatabaseRoutingEnum.m new file mode 100644 index 0000000..d4abe09 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubConnectionProperties_1DatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef EventHubConnectionProperties_1DatabaseRoutingEnum < adx.control.JSONEnum +% EventHubConnectionProperties_1DatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataConnection.m new file mode 100644 index 0000000..3b05d0c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataConnection.m @@ -0,0 +1,43 @@ +classdef EventHubDataConnection < adx.control.JSONMapper +% EventHubDataConnection Class representing an event hub data connection. +% +% EventHubDataConnection Properties: +% xproperties - type: EventHubConnectionProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: EventHubConnectionProperties_1 + xproperties adx.control.models.EventHubConnectionProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = EventHubDataConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.EventHubDataConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataFormat.m b/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataFormat.m new file mode 100644 index 0000000..8cbaef9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/EventHubDataFormat.m @@ -0,0 +1,29 @@ +classdef EventHubDataFormat < adx.control.JSONEnum +% EventHubDataFormat The data format of the message. Optionally the data format can be added to each message. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + MULTIJSON ("MULTIJSON") + JSON ("JSON") + CSV ("CSV") + TSV ("TSV") + SCSV ("SCSV") + SOHSV ("SOHSV") + PSV ("PSV") + TXT ("TXT") + RAW ("RAW") + SINGLEJSON ("SINGLEJSON") + AVRO ("AVRO") + TSVE ("TSVE") + PARQUET ("PARQUET") + ORC ("ORC") + APACHEAVRO ("APACHEAVRO") + W3CLOGFILE ("W3CLOGFILE") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseDefinition.m b/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseDefinition.m new file mode 100644 index 0000000..a0825a2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseDefinition.m @@ -0,0 +1,46 @@ +classdef FollowerDatabaseDefinition < adx.control.JSONMapper +% FollowerDatabaseDefinition A class representing follower database request. +% +% FollowerDatabaseDefinition Properties: +% clusterResourceId - Resource id of the cluster that follows a database owned by this cluster. - type: string +% attachedDatabaseConfigurationName - Resource name of the attached database configuration in the follower cluster. - type: string +% databaseName - The database name owned by this cluster that was followed. * in case following all databases. - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties +% databaseShareOrigin - type: DatabaseShareOrigin + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % clusterResourceId - Resource id of the cluster that follows a database owned by this cluster. - type: string + clusterResourceId string { adx.control.JSONMapper.fieldName(clusterResourceId,"clusterResourceId") } + % attachedDatabaseConfigurationName - Resource name of the attached database configuration in the follower cluster. - type: string + attachedDatabaseConfigurationName string { adx.control.JSONMapper.fieldName(attachedDatabaseConfigurationName,"attachedDatabaseConfigurationName") } + % databaseName - The database name owned by this cluster that was followed. * in case following all databases. - type: string + databaseName string { adx.control.JSONMapper.fieldName(databaseName,"databaseName") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + % databaseShareOrigin - type: DatabaseShareOrigin + databaseShareOrigin adx.control.models.DatabaseShareOrigin { adx.control.JSONMapper.fieldName(databaseShareOrigin,"databaseShareOrigin") } + end + + % Class methods + methods + % Constructor + function obj = FollowerDatabaseDefinition(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.FollowerDatabaseDefinition + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseListResult.m new file mode 100644 index 0000000..6185137 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/FollowerDatabaseListResult.m @@ -0,0 +1,34 @@ +classdef FollowerDatabaseListResult < adx.control.JSONMapper +% FollowerDatabaseListResult The list Kusto database principals operation response. +% +% FollowerDatabaseListResult Properties: +% value - The list of follower database result. - type: array of FollowerDatabaseDefinition + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of follower database result. - type: array of FollowerDatabaseDefinition + value adx.control.models.FollowerDatabaseDefinition { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = FollowerDatabaseListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.FollowerDatabaseListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/FreeFormObject.m b/Software/MATLAB/app/system/+adx/+control/+models/FreeFormObject.m new file mode 100644 index 0000000..4d04d3a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/FreeFormObject.m @@ -0,0 +1,35 @@ +classdef FreeFormObject < dynamicprops + % Class methods + + % (c) 2023 MathWorks Inc. + + methods + function obj = FreeFormObject(json) + if nargin==0 + return + end + if isstruct(json) + % When called recursively + s = json; + else + % When called with original JSON as input + s = jsondecode(json); + end + % For all the fields in the struct + for f = string(fieldnames(s))' + % Add a dynamic property + obj.addprop(f); + if isstruct(s.(f)) + % If the field is another struct, call the method + % recursively such that the property also becomes another + % FreeFromObject + obj.(f) = adx.control.models.FreeFormObject(s.(f)); + else + % Any other type just assign to the field + obj.(f) = s.(f); + end + end + end + end %methods +end + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Identity.m b/Software/MATLAB/app/system/+adx/+control/+models/Identity.m new file mode 100644 index 0000000..bd9b2d8 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Identity.m @@ -0,0 +1,43 @@ +classdef Identity < adx.control.JSONMapper +% Identity Identity for the resource. +% +% Identity Properties: +% principalId - The principal ID of resource identity. - type: string +% tenantId - The tenant ID of resource. - type: string +% type - The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove all identities. - type: string +% userAssignedIdentities - The list of user identities associated with the Kusto cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''. - type: adx.control.JSONMapperMap + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal ID of resource identity. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % tenantId - The tenant ID of resource. - type: string + tenantId string { adx.control.JSONMapper.fieldName(tenantId,"tenantId") } + % type - The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove all identities. - type: string + type adx.control.models.IdentityTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + % userAssignedIdentities - The list of user identities associated with the Kusto cluster. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''. - type: adx.control.JSONMapperMap + userAssignedIdentities adx.control.models.Identity_userAssignedIdentities_value { adx.control.JSONMapper.fieldName(userAssignedIdentities,"userAssignedIdentities") } + end + + % Class methods + methods + % Constructor + function obj = Identity(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Identity + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IdentityTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/IdentityTypeEnum.m new file mode 100644 index 0000000..31ea962 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IdentityTypeEnum.m @@ -0,0 +1,17 @@ +classdef IdentityTypeEnum < adx.control.JSONEnum +% IdentityTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + None ("None") + SystemAssigned ("SystemAssigned") + UserAssigned ("UserAssigned") + SystemAssigned_UserAssigned ("SystemAssigned, UserAssigned") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Identity_userAssignedIdentities_value.m b/Software/MATLAB/app/system/+adx/+control/+models/Identity_userAssignedIdentities_value.m new file mode 100644 index 0000000..87e791d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Identity_userAssignedIdentities_value.m @@ -0,0 +1,37 @@ +classdef Identity_userAssignedIdentities_value < adx.control.JSONMapper +% Identity_userAssignedIdentities_value No description provided +% +% Identity_userAssignedIdentities_value Properties: +% principalId - The principal id of user assigned identity. - type: string +% clientId - The client id of user assigned identity. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % principalId - The principal id of user assigned identity. - type: string + principalId string { adx.control.JSONMapper.fieldName(principalId,"principalId") } + % clientId - The client id of user assigned identity. - type: string + clientId string { adx.control.JSONMapper.fieldName(clientId,"clientId") } + end + + % Class methods + methods + % Constructor + function obj = Identity_userAssignedIdentities_value(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Identity_userAssignedIdentities_value + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties.m new file mode 100644 index 0000000..c215431 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties.m @@ -0,0 +1,61 @@ +classdef IotHubConnectionProperties < adx.control.JSONMapper +% IotHubConnectionProperties Class representing the Kusto Iot hub connection properties. +% +% IotHubConnectionProperties Properties: +% iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string +% consumerGroup - The iot hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: IotHubDataFormat +% eventSystemProperties - System properties of the iot hub - type: array of string +% sharedAccessPolicyName - The name of the share access policy - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + iotHubResourceId string { adx.control.JSONMapper.fieldName(iotHubResourceId,"iotHubResourceId") } + % consumerGroup - The iot hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: IotHubDataFormat + dataFormat adx.control.models.IotHubDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % eventSystemProperties - System properties of the iot hub - type: array of string + eventSystemProperties string { adx.control.JSONMapper.fieldName(eventSystemProperties,"eventSystemProperties"), adx.control.JSONMapper.JSONArray } + % sharedAccessPolicyName - The name of the share access policy - type: string + sharedAccessPolicyName string { adx.control.JSONMapper.fieldName(sharedAccessPolicyName,"sharedAccessPolicyName") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.IotHubConnectionPropertiesDatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = IotHubConnectionProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.IotHubConnectionProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionPropertiesDatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionPropertiesDatabaseRoutingEnum.m new file mode 100644 index 0000000..08e181a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionPropertiesDatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef IotHubConnectionPropertiesDatabaseRoutingEnum < adx.control.JSONEnum +% IotHubConnectionPropertiesDatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1.m new file mode 100644 index 0000000..b51d6f3 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1.m @@ -0,0 +1,61 @@ +classdef IotHubConnectionProperties_1 < adx.control.JSONMapper +% IotHubConnectionProperties_1 Class representing the Kusto Iot hub connection properties. +% +% IotHubConnectionProperties_1 Properties: +% iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string +% consumerGroup - The iot hub consumer group. - type: string +% tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string +% mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string +% dataFormat - type: IotHubDataFormat +% eventSystemProperties - System properties of the iot hub - type: array of string +% sharedAccessPolicyName - The name of the share access policy - type: string +% databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string +% retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % iotHubResourceId - The resource ID of the Iot hub to be used to create a data connection. - type: string + iotHubResourceId string { adx.control.JSONMapper.fieldName(iotHubResourceId,"iotHubResourceId") } + % consumerGroup - The iot hub consumer group. - type: string + consumerGroup string { adx.control.JSONMapper.fieldName(consumerGroup,"consumerGroup") } + % tableName - The table where the data should be ingested. Optionally the table information can be added to each message. - type: string + tableName string { adx.control.JSONMapper.fieldName(tableName,"tableName") } + % mappingRuleName - The mapping rule to be used to ingest the data. Optionally the mapping information can be added to each message. - type: string + mappingRuleName string { adx.control.JSONMapper.fieldName(mappingRuleName,"mappingRuleName") } + % dataFormat - type: IotHubDataFormat + dataFormat adx.control.models.IotHubDataFormat { adx.control.JSONMapper.fieldName(dataFormat,"dataFormat") } + % eventSystemProperties - System properties of the iot hub - type: array of string + eventSystemProperties string { adx.control.JSONMapper.fieldName(eventSystemProperties,"eventSystemProperties"), adx.control.JSONMapper.JSONArray } + % sharedAccessPolicyName - The name of the share access policy - type: string + sharedAccessPolicyName string { adx.control.JSONMapper.fieldName(sharedAccessPolicyName,"sharedAccessPolicyName") } + % databaseRouting - Indication for database routing information from the data connection, by default only database routing information is allowed - type: string + databaseRouting adx.control.models.IotHubConnectionProperties_1DatabaseRoutingEnum { adx.control.JSONMapper.fieldName(databaseRouting,"databaseRouting") } + % retrievalStartDate - When defined, the data connection retrieves existing Event hub events created since the Retrieval start date. It can only retrieve events retained by the Event hub, based on its retention period. - type: datetime + retrievalStartDate datetime { adx.control.JSONMapper.stringDatetime(retrievalStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(retrievalStartDate,"retrievalStartDate") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = IotHubConnectionProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.IotHubConnectionProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1DatabaseRoutingEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1DatabaseRoutingEnum.m new file mode 100644 index 0000000..20583c0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubConnectionProperties_1DatabaseRoutingEnum.m @@ -0,0 +1,15 @@ +classdef IotHubConnectionProperties_1DatabaseRoutingEnum < adx.control.JSONEnum +% IotHubConnectionProperties_1DatabaseRoutingEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Single ("Single") + Multi ("Multi") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataConnection.m new file mode 100644 index 0000000..e31b458 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataConnection.m @@ -0,0 +1,43 @@ +classdef IotHubDataConnection < adx.control.JSONMapper +% IotHubDataConnection Class representing an iot hub data connection. +% +% IotHubDataConnection Properties: +% xproperties - type: IotHubConnectionProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: IotHubConnectionProperties_1 + xproperties adx.control.models.IotHubConnectionProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = IotHubDataConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.IotHubDataConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataFormat.m b/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataFormat.m new file mode 100644 index 0000000..d625c20 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/IotHubDataFormat.m @@ -0,0 +1,29 @@ +classdef IotHubDataFormat < adx.control.JSONEnum +% IotHubDataFormat The data format of the message. Optionally the data format can be added to each message. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + MULTIJSON ("MULTIJSON") + JSON ("JSON") + CSV ("CSV") + TSV ("TSV") + SCSV ("SCSV") + SOHSV ("SOHSV") + PSV ("PSV") + TXT ("TXT") + RAW ("RAW") + SINGLEJSON ("SINGLEJSON") + AVRO ("AVRO") + TSVE ("TSVE") + PARQUET ("PARQUET") + ORC ("ORC") + APACHEAVRO ("APACHEAVRO") + W3CLOGFILE ("W3CLOGFILE") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/KeyVaultProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/KeyVaultProperties.m new file mode 100644 index 0000000..39c9391 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/KeyVaultProperties.m @@ -0,0 +1,43 @@ +classdef KeyVaultProperties < adx.control.JSONMapper +% KeyVaultProperties Properties of the key vault. +% +% KeyVaultProperties Properties: +% keyName - The name of the key vault key. - type: string +% keyVersion - The version of the key vault key. - type: string +% keyVaultUri - The Uri of the key vault. - type: string +% userIdentity - The user assigned identity (ARM resource id) that has access to the key. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % keyName - The name of the key vault key. - type: string + keyName string { adx.control.JSONMapper.fieldName(keyName,"keyName") } + % keyVersion - The version of the key vault key. - type: string + keyVersion string { adx.control.JSONMapper.fieldName(keyVersion,"keyVersion") } + % keyVaultUri - The Uri of the key vault. - type: string + keyVaultUri string { adx.control.JSONMapper.fieldName(keyVaultUri,"keyVaultUri") } + % userIdentity - The user assigned identity (ARM resource id) that has access to the key. - type: string + userIdentity string { adx.control.JSONMapper.fieldName(userIdentity,"userIdentity") } + end + + % Class methods + methods + % Constructor + function obj = KeyVaultProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.KeyVaultProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension.m b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension.m new file mode 100644 index 0000000..7e21946 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension.m @@ -0,0 +1,37 @@ +classdef LanguageExtension < adx.control.JSONMapper +% LanguageExtension The language extension object. +% +% LanguageExtension Properties: +% languageExtensionName - type: LanguageExtensionName +% languageExtensionImageName - type: LanguageExtensionImageName + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % languageExtensionName - type: LanguageExtensionName + languageExtensionName adx.control.models.LanguageExtensionName { adx.control.JSONMapper.fieldName(languageExtensionName,"languageExtensionName") } + % languageExtensionImageName - type: LanguageExtensionImageName + languageExtensionImageName adx.control.models.LanguageExtensionImageName { adx.control.JSONMapper.fieldName(languageExtensionImageName,"languageExtensionImageName") } + end + + % Class methods + methods + % Constructor + function obj = LanguageExtension(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.LanguageExtension + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionImageName.m b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionImageName.m new file mode 100644 index 0000000..051a0ad --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionImageName.m @@ -0,0 +1,16 @@ +classdef LanguageExtensionImageName < adx.control.JSONEnum +% LanguageExtensionImageName Language extension image name. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + R ("R") + Python3_6_5 ("Python3_6_5") + Python3_10_8 ("Python3_10_8") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionName.m b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionName.m new file mode 100644 index 0000000..e5a957a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionName.m @@ -0,0 +1,15 @@ +classdef LanguageExtensionName < adx.control.JSONEnum +% LanguageExtensionName Language extension that can run within KQL query. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + PYTHON ("PYTHON") + R ("R") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension_1.m b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension_1.m new file mode 100644 index 0000000..b684454 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtension_1.m @@ -0,0 +1,37 @@ +classdef LanguageExtension_1 < adx.control.JSONMapper +% LanguageExtension_1 The language extension object. +% +% LanguageExtension_1 Properties: +% languageExtensionName - type: LanguageExtensionName +% languageExtensionImageName - type: LanguageExtensionImageName + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % languageExtensionName - type: LanguageExtensionName + languageExtensionName adx.control.models.LanguageExtensionName { adx.control.JSONMapper.fieldName(languageExtensionName,"languageExtensionName") } + % languageExtensionImageName - type: LanguageExtensionImageName + languageExtensionImageName adx.control.models.LanguageExtensionImageName { adx.control.JSONMapper.fieldName(languageExtensionImageName,"languageExtensionImageName") } + end + + % Class methods + methods + % Constructor + function obj = LanguageExtension_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.LanguageExtension_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionsList.m b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionsList.m new file mode 100644 index 0000000..a0c8a45 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/LanguageExtensionsList.m @@ -0,0 +1,34 @@ +classdef LanguageExtensionsList < adx.control.JSONMapper +% LanguageExtensionsList The list of language extension objects. +% +% LanguageExtensionsList Properties: +% value - The list of language extensions. - type: array of LanguageExtension_1 + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of language extensions. - type: array of LanguageExtension_1 + value adx.control.models.LanguageExtension_1 { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = LanguageExtensionsList(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.LanguageExtensionsList + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ListResourceSkusResult.m b/Software/MATLAB/app/system/+adx/+control/+models/ListResourceSkusResult.m new file mode 100644 index 0000000..9265807 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ListResourceSkusResult.m @@ -0,0 +1,34 @@ +classdef ListResourceSkusResult < adx.control.JSONMapper +% ListResourceSkusResult List of available SKUs for a Kusto Cluster. +% +% ListResourceSkusResult Properties: +% value - The collection of available SKUs for an existing resource. - type: array of AzureResourceSku_1 + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The collection of available SKUs for an existing resource. - type: array of AzureResourceSku_1 + value adx.control.models.AzureResourceSku_1 { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ListResourceSkusResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ListResourceSkusResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpoint.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpoint.m new file mode 100644 index 0000000..677baf9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpoint.m @@ -0,0 +1,46 @@ +classdef ManagedPrivateEndpoint < adx.control.JSONMapper +% ManagedPrivateEndpoint Class representing a managed private endpoint. +% +% ManagedPrivateEndpoint Properties: +% xproperties - type: ManagedPrivateEndpointProperties_1 +% systemData - type: systemData +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: ManagedPrivateEndpointProperties_1 + xproperties adx.control.models.ManagedPrivateEndpointProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % systemData - type: systemData + systemData adx.control.models.systemData { adx.control.JSONMapper.fieldName(systemData,"systemData") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ManagedPrivateEndpoint(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ManagedPrivateEndpoint + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointListResult.m new file mode 100644 index 0000000..0a2bc7d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointListResult.m @@ -0,0 +1,34 @@ +classdef ManagedPrivateEndpointListResult < adx.control.JSONMapper +% ManagedPrivateEndpointListResult The list managed private endpoints operation response. +% +% ManagedPrivateEndpointListResult Properties: +% value - The list of managed private endpoints. - type: array of ManagedPrivateEndpoint + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of managed private endpoints. - type: array of ManagedPrivateEndpoint + value adx.control.models.ManagedPrivateEndpoint { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ManagedPrivateEndpointListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ManagedPrivateEndpointListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties.m new file mode 100644 index 0000000..6f1cebc --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties.m @@ -0,0 +1,46 @@ +classdef ManagedPrivateEndpointProperties < adx.control.JSONMapper +% ManagedPrivateEndpointProperties A class representing the properties of a managed private endpoint object. +% +% ManagedPrivateEndpointProperties Properties: +% privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string +% privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string +% groupId - The groupId in which the managed private endpoint is created. - type: string +% requestMessage - The user request message. - type: string +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceId string { adx.control.JSONMapper.fieldName(privateLinkResourceId,"privateLinkResourceId") } + % privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + privateLinkResourceRegion string { adx.control.JSONMapper.fieldName(privateLinkResourceRegion,"privateLinkResourceRegion") } + % groupId - The groupId in which the managed private endpoint is created. - type: string + groupId string { adx.control.JSONMapper.fieldName(groupId,"groupId") } + % requestMessage - The user request message. - type: string + requestMessage string { adx.control.JSONMapper.fieldName(requestMessage,"requestMessage") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = ManagedPrivateEndpointProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ManagedPrivateEndpointProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties_1.m new file mode 100644 index 0000000..01eb948 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointProperties_1.m @@ -0,0 +1,46 @@ +classdef ManagedPrivateEndpointProperties_1 < adx.control.JSONMapper +% ManagedPrivateEndpointProperties_1 A class representing the properties of a managed private endpoint object. +% +% ManagedPrivateEndpointProperties_1 Properties: +% privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string +% privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string +% groupId - The groupId in which the managed private endpoint is created. - type: string +% requestMessage - The user request message. - type: string +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % privateLinkResourceId - The ARM resource ID of the resource for which the managed private endpoint is created. - type: string + privateLinkResourceId string { adx.control.JSONMapper.fieldName(privateLinkResourceId,"privateLinkResourceId") } + % privateLinkResourceRegion - The region of the resource to which the managed private endpoint is created. - type: string + privateLinkResourceRegion string { adx.control.JSONMapper.fieldName(privateLinkResourceRegion,"privateLinkResourceRegion") } + % groupId - The groupId in which the managed private endpoint is created. - type: string + groupId string { adx.control.JSONMapper.fieldName(groupId,"groupId") } + % requestMessage - The user request message. - type: string + requestMessage string { adx.control.JSONMapper.fieldName(requestMessage,"requestMessage") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = ManagedPrivateEndpointProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ManagedPrivateEndpointProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequest.m new file mode 100644 index 0000000..15ca125 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef ManagedPrivateEndpointsCheckNameRequest < adx.control.JSONMapper +% ManagedPrivateEndpointsCheckNameRequest The result returned from a managedPrivateEndpoints check name availability request. +% +% ManagedPrivateEndpointsCheckNameRequest Properties: +% name - Managed private endpoint resource name. - type: string +% type - The type of resource, for instance Microsoft.Kusto/clusters/managedPrivateEndpoints. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Managed private endpoint resource name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, for instance Microsoft.Kusto/clusters/managedPrivateEndpoints. - type: string + type adx.control.models.ManagedPrivateEndpointsCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ManagedPrivateEndpointsCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ManagedPrivateEndpointsCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..6f1fcf6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ManagedPrivateEndpointsCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef ManagedPrivateEndpointsCheckNameRequestTypeEnum < adx.control.JSONEnum +% ManagedPrivateEndpointsCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_managedPrivateEndpoints ("Microsoft.Kusto/clusters/managedPrivateEndpoints") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterProperties.m new file mode 100644 index 0000000..234deba --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterProperties.m @@ -0,0 +1,43 @@ +classdef MigrationClusterProperties < adx.control.JSONMapper +% MigrationClusterProperties Represents a properties of a cluster that is part of a migration. +% +% MigrationClusterProperties Properties: +% id - The resource ID of the cluster. - type: string +% uri - The public URL of the cluster. - type: string +% dataIngestionUri - The public data ingestion URL of the cluster. - type: string +% role - The role of the cluster in the migration process. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % id - The resource ID of the cluster. - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % uri - The public URL of the cluster. - type: string + uri string { adx.control.JSONMapper.fieldName(uri,"uri") } + % dataIngestionUri - The public data ingestion URL of the cluster. - type: string + dataIngestionUri string { adx.control.JSONMapper.fieldName(dataIngestionUri,"dataIngestionUri") } + % role - The role of the cluster in the migration process. - type: string + role adx.control.models.MigrationClusterPropertiesRoleEnum { adx.control.JSONMapper.fieldName(role,"role") } + end + + % Class methods + methods + % Constructor + function obj = MigrationClusterProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.MigrationClusterProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterPropertiesRoleEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterPropertiesRoleEnum.m new file mode 100644 index 0000000..542659e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/MigrationClusterPropertiesRoleEnum.m @@ -0,0 +1,15 @@ +classdef MigrationClusterPropertiesRoleEnum < adx.control.JSONEnum +% MigrationClusterPropertiesRoleEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Source ("Source") + Destination ("Destination") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Operation.m b/Software/MATLAB/app/system/+adx/+control/+models/Operation.m new file mode 100644 index 0000000..5c49ce0 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Operation.m @@ -0,0 +1,43 @@ +classdef Operation < adx.control.JSONMapper +% Operation No description provided +% +% Operation Properties: +% name - This is of the format {provider}/{resource}/{operation}. - type: string +% display - type: The_object_that_describes_the_operation_ +% origin - type: string +% xproperties - type: object + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - This is of the format {provider}/{resource}/{operation}. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % display - type: The_object_that_describes_the_operation_ + display adx.control.models.The_object_that_describes_the_operation_ { adx.control.JSONMapper.fieldName(display,"display") } + % origin - type: string + origin string { adx.control.JSONMapper.fieldName(origin,"origin") } + % xproperties - type: object + xproperties { adx.control.JSONMapper.fieldName(xproperties,"properties") } + end + + % Class methods + methods + % Constructor + function obj = Operation(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Operation + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OperationListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/OperationListResult.m new file mode 100644 index 0000000..96c4484 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OperationListResult.m @@ -0,0 +1,37 @@ +classdef OperationListResult < adx.control.JSONMapper +% OperationListResult No description provided +% +% OperationListResult Properties: +% value - type: array of Operation +% nextLink - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - type: array of Operation + value adx.control.models.Operation { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + % nextLink - type: string + nextLink string { adx.control.JSONMapper.fieldName(nextLink,"nextLink") } + end + + % Class methods + methods + % Constructor + function obj = OperationListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OperationListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OperationResult.m b/Software/MATLAB/app/system/+adx/+control/+models/OperationResult.m new file mode 100644 index 0000000..68a5695 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OperationResult.m @@ -0,0 +1,55 @@ +classdef OperationResult < adx.control.JSONMapper +% OperationResult Operation Result Entity. +% +% OperationResult Properties: +% id - ID of the resource. - type: string +% name - Name of the resource. - type: string +% status - type: Status +% startTime - The operation start time - type: datetime +% endTime - The operation end time - type: datetime +% percentComplete - Percentage completed. - type: double +% xproperties - type: OperationResultProperties +% error - type: OperationResultErrorProperties + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % id - ID of the resource. - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - Name of the resource. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % status - type: Status + status adx.control.models.Status { adx.control.JSONMapper.fieldName(status,"status") } + % startTime - The operation start time - type: datetime + startTime datetime { adx.control.JSONMapper.stringDatetime(startTime,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(startTime,"startTime") } + % endTime - The operation end time - type: datetime + endTime datetime { adx.control.JSONMapper.stringDatetime(endTime,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(endTime,"endTime") } + % percentComplete - Percentage completed. - type: double + percentComplete double { adx.control.JSONMapper.fieldName(percentComplete,"percentComplete") } + % xproperties - type: OperationResultProperties + xproperties adx.control.models.OperationResultProperties { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % error - type: OperationResultErrorProperties + error adx.control.models.OperationResultErrorProperties { adx.control.JSONMapper.fieldName(error,"error") } + end + + % Class methods + methods + % Constructor + function obj = OperationResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OperationResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OperationResultErrorProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/OperationResultErrorProperties.m new file mode 100644 index 0000000..e6e93af --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OperationResultErrorProperties.m @@ -0,0 +1,37 @@ +classdef OperationResultErrorProperties < adx.control.JSONMapper +% OperationResultErrorProperties Operation result error properties +% +% OperationResultErrorProperties Properties: +% code - The code of the error. - type: string +% message - The error message. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % code - The code of the error. - type: string + code string { adx.control.JSONMapper.fieldName(code,"code") } + % message - The error message. - type: string + message string { adx.control.JSONMapper.fieldName(message,"message") } + end + + % Class methods + methods + % Constructor + function obj = OperationResultErrorProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OperationResultErrorProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OperationResultProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/OperationResultProperties.m new file mode 100644 index 0000000..6f8bcb6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OperationResultProperties.m @@ -0,0 +1,40 @@ +classdef OperationResultProperties < adx.control.JSONMapper +% OperationResultProperties Operation result properties +% +% OperationResultProperties Properties: +% operationKind - The kind of the operation. - type: string +% provisioningState - type: ProvisioningState +% operationState - The state of the operation. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % operationKind - The kind of the operation. - type: string + operationKind string { adx.control.JSONMapper.fieldName(operationKind,"operationKind") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % operationState - The state of the operation. - type: string + operationState string { adx.control.JSONMapper.fieldName(operationState,"operationState") } + end + + % Class methods + methods + % Constructor + function obj = OperationResultProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OperationResultProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OptimizedAutoscale.m b/Software/MATLAB/app/system/+adx/+control/+models/OptimizedAutoscale.m new file mode 100644 index 0000000..4537a31 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OptimizedAutoscale.m @@ -0,0 +1,43 @@ +classdef OptimizedAutoscale < adx.control.JSONMapper +% OptimizedAutoscale A class that contains the optimized auto scale definition. +% +% OptimizedAutoscale Properties: +% version - The version of the template defined, for instance 1. - type: int32 +% isEnabled - A boolean value that indicate if the optimized autoscale feature is enabled or not. - type: logical +% minimum - Minimum allowed instances count. - type: int32 +% maximum - Maximum allowed instances count. - type: int32 + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % version - The version of the template defined, for instance 1. - type: int32 + version int32 { adx.control.JSONMapper.fieldName(version,"version") } + % isEnabled - A boolean value that indicate if the optimized autoscale feature is enabled or not. - type: logical + isEnabled logical { adx.control.JSONMapper.fieldName(isEnabled,"isEnabled") } + % minimum - Minimum allowed instances count. - type: int32 + minimum int32 { adx.control.JSONMapper.fieldName(minimum,"minimum") } + % maximum - Maximum allowed instances count. - type: int32 + maximum int32 { adx.control.JSONMapper.fieldName(maximum,"maximum") } + end + + % Class methods + methods + % Constructor + function obj = OptimizedAutoscale(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OptimizedAutoscale + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpoint.m b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpoint.m new file mode 100644 index 0000000..32cae4e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpoint.m @@ -0,0 +1,46 @@ +classdef OutboundNetworkDependenciesEndpoint < adx.control.JSONMapper +% OutboundNetworkDependenciesEndpoint Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. +% +% OutboundNetworkDependenciesEndpoint Properties: +% xproperties - type: OutboundNetworkDependenciesEndpointProperties +% etag - A unique read-only string that changes whenever the resource is updated. - type: string +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: OutboundNetworkDependenciesEndpointProperties + xproperties adx.control.models.OutboundNetworkDependenciesEndpointProperties { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % etag - A unique read-only string that changes whenever the resource is updated. - type: string + etag string { adx.control.JSONMapper.fieldName(etag,"etag") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = OutboundNetworkDependenciesEndpoint(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OutboundNetworkDependenciesEndpoint + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointListResult.m new file mode 100644 index 0000000..65fff50 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointListResult.m @@ -0,0 +1,37 @@ +classdef OutboundNetworkDependenciesEndpointListResult < adx.control.JSONMapper +% OutboundNetworkDependenciesEndpointListResult Collection of Outbound Environment Endpoints +% +% OutboundNetworkDependenciesEndpointListResult Properties: +% value - Collection of resources. - type: array of OutboundNetworkDependenciesEndpoint +% nextLink - Link to next page of resources. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - Collection of resources. - type: array of OutboundNetworkDependenciesEndpoint + value adx.control.models.OutboundNetworkDependenciesEndpoint { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + % nextLink - Link to next page of resources. - type: string + nextLink string { adx.control.JSONMapper.fieldName(nextLink,"nextLink") } + end + + % Class methods + methods + % Constructor + function obj = OutboundNetworkDependenciesEndpointListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OutboundNetworkDependenciesEndpointListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointProperties.m new file mode 100644 index 0000000..862bfdc --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/OutboundNetworkDependenciesEndpointProperties.m @@ -0,0 +1,40 @@ +classdef OutboundNetworkDependenciesEndpointProperties < adx.control.JSONMapper +% OutboundNetworkDependenciesEndpointProperties Endpoints accessed for a common purpose that the Kusto Service Environment requires outbound network access to. +% +% OutboundNetworkDependenciesEndpointProperties Properties: +% category - The type of service accessed by the Kusto Service Environment, e.g., Azure Storage, Azure SQL Database, and Azure Active Directory. - type: string +% endpoints - The endpoints that the Kusto Service Environment reaches the service at. - type: array of EndpointDependency +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % category - The type of service accessed by the Kusto Service Environment, e.g., Azure Storage, Azure SQL Database, and Azure Active Directory. - type: string + category string { adx.control.JSONMapper.fieldName(category,"category") } + % endpoints - The endpoints that the Kusto Service Environment reaches the service at. - type: array of EndpointDependency + endpoints adx.control.models.EndpointDependency { adx.control.JSONMapper.fieldName(endpoints,"endpoints"), adx.control.JSONMapper.JSONArray } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = OutboundNetworkDependenciesEndpointProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.OutboundNetworkDependenciesEndpointProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnection.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnection.m new file mode 100644 index 0000000..4e73824 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnection.m @@ -0,0 +1,46 @@ +classdef PrivateEndpointConnection < adx.control.JSONMapper +% PrivateEndpointConnection A private endpoint connection +% +% PrivateEndpointConnection Properties: +% xproperties - type: PrivateEndpointConnectionProperties +% systemData - type: systemData +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: PrivateEndpointConnectionProperties + xproperties adx.control.models.PrivateEndpointConnectionProperties { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % systemData - type: systemData + systemData adx.control.models.systemData { adx.control.JSONMapper.fieldName(systemData,"systemData") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = PrivateEndpointConnection(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateEndpointConnection + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionListResult.m new file mode 100644 index 0000000..ac6839b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionListResult.m @@ -0,0 +1,34 @@ +classdef PrivateEndpointConnectionListResult < adx.control.JSONMapper +% PrivateEndpointConnectionListResult A list of private endpoint connections +% +% PrivateEndpointConnectionListResult Properties: +% value - Array of private endpoint connections - type: array of PrivateEndpointConnection + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - Array of private endpoint connections - type: array of PrivateEndpointConnection + value adx.control.models.PrivateEndpointConnection { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = PrivateEndpointConnectionListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateEndpointConnectionListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionProperties.m new file mode 100644 index 0000000..418e495 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointConnectionProperties.m @@ -0,0 +1,43 @@ +classdef PrivateEndpointConnectionProperties < adx.control.JSONMapper +% PrivateEndpointConnectionProperties Properties of a private endpoint connection. +% +% PrivateEndpointConnectionProperties Properties: +% privateEndpoint - type: PrivateEndpointProperty +% privateLinkServiceConnectionState - type: PrivateLinkServiceConnectionStateProperty +% groupId - Group id of the private endpoint. - type: string +% provisioningState - Provisioning state of the private endpoint. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % privateEndpoint - type: PrivateEndpointProperty + privateEndpoint adx.control.models.PrivateEndpointProperty { adx.control.JSONMapper.fieldName(privateEndpoint,"privateEndpoint") } + % privateLinkServiceConnectionState - type: PrivateLinkServiceConnectionStateProperty + privateLinkServiceConnectionState adx.control.models.PrivateLinkServiceConnectionStateProperty { adx.control.JSONMapper.fieldName(privateLinkServiceConnectionState,"privateLinkServiceConnectionState") } + % groupId - Group id of the private endpoint. - type: string + groupId string { adx.control.JSONMapper.fieldName(groupId,"groupId") } + % provisioningState - Provisioning state of the private endpoint. - type: string + provisioningState string { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = PrivateEndpointConnectionProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateEndpointConnectionProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointProperty.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointProperty.m new file mode 100644 index 0000000..8532215 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateEndpointProperty.m @@ -0,0 +1,34 @@ +classdef PrivateEndpointProperty < adx.control.JSONMapper +% PrivateEndpointProperty Private endpoint which the connection belongs to. +% +% PrivateEndpointProperty Properties: +% id - Resource id of the private endpoint. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % id - Resource id of the private endpoint. - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + end + + % Class methods + methods + % Constructor + function obj = PrivateEndpointProperty(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateEndpointProperty + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResource.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResource.m new file mode 100644 index 0000000..567f8ff --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResource.m @@ -0,0 +1,46 @@ +classdef PrivateLinkResource < adx.control.JSONMapper +% PrivateLinkResource A private link resource +% +% PrivateLinkResource Properties: +% xproperties - type: PrivateLinkResourceProperties +% systemData - type: systemData +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: PrivateLinkResourceProperties + xproperties adx.control.models.PrivateLinkResourceProperties { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % systemData - type: systemData + systemData adx.control.models.systemData { adx.control.JSONMapper.fieldName(systemData,"systemData") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = PrivateLinkResource(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateLinkResource + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceListResult.m new file mode 100644 index 0000000..9128bad --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceListResult.m @@ -0,0 +1,34 @@ +classdef PrivateLinkResourceListResult < adx.control.JSONMapper +% PrivateLinkResourceListResult A list of private link resources +% +% PrivateLinkResourceListResult Properties: +% value - Array of private link resources - type: array of PrivateLinkResource + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - Array of private link resources - type: array of PrivateLinkResource + value adx.control.models.PrivateLinkResource { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = PrivateLinkResourceListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateLinkResourceListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceProperties.m new file mode 100644 index 0000000..f8f5255 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkResourceProperties.m @@ -0,0 +1,40 @@ +classdef PrivateLinkResourceProperties < adx.control.JSONMapper +% PrivateLinkResourceProperties Properties of a private link resource. +% +% PrivateLinkResourceProperties Properties: +% groupId - The private link resource group id. - type: string +% requiredMembers - The private link resource required member names. - type: array of string +% requiredZoneNames - The private link resource required zone names. - type: array of string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % groupId - The private link resource group id. - type: string + groupId string { adx.control.JSONMapper.fieldName(groupId,"groupId") } + % requiredMembers - The private link resource required member names. - type: array of string + requiredMembers string { adx.control.JSONMapper.fieldName(requiredMembers,"requiredMembers"), adx.control.JSONMapper.JSONArray } + % requiredZoneNames - The private link resource required zone names. - type: array of string + requiredZoneNames string { adx.control.JSONMapper.fieldName(requiredZoneNames,"requiredZoneNames"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = PrivateLinkResourceProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateLinkResourceProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkServiceConnectionStateProperty.m b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkServiceConnectionStateProperty.m new file mode 100644 index 0000000..f9eead2 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/PrivateLinkServiceConnectionStateProperty.m @@ -0,0 +1,40 @@ +classdef PrivateLinkServiceConnectionStateProperty < adx.control.JSONMapper +% PrivateLinkServiceConnectionStateProperty Connection State of the Private Endpoint Connection. +% +% PrivateLinkServiceConnectionStateProperty Properties: +% status - The private link service connection status. - type: string +% description - The private link service connection description. - type: string +% actionsRequired - Any action that is required beyond basic workflow (approve/ reject/ disconnect) - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % status - The private link service connection status. - type: string + status string { adx.control.JSONMapper.fieldName(status,"status") } + % description - The private link service connection description. - type: string + description string { adx.control.JSONMapper.fieldName(description,"description") } + % actionsRequired - Any action that is required beyond basic workflow (approve/ reject/ disconnect) - type: string + actionsRequired string { adx.control.JSONMapper.fieldName(actionsRequired,"actionsRequired") } + end + + % Class methods + methods + % Constructor + function obj = PrivateLinkServiceConnectionStateProperty(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.PrivateLinkServiceConnectionStateProperty + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ProvisioningState.m b/Software/MATLAB/app/system/+adx/+control/+models/ProvisioningState.m new file mode 100644 index 0000000..a91a72e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ProvisioningState.m @@ -0,0 +1,20 @@ +classdef ProvisioningState < adx.control.JSONEnum +% ProvisioningState The provisioned state of the resource. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Running ("Running") + Creating ("Creating") + Deleting ("Deleting") + Succeeded ("Succeeded") + Failed ("Failed") + Moving ("Moving") + Canceled ("Canceled") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ProxyResource.m b/Software/MATLAB/app/system/+adx/+control/+models/ProxyResource.m new file mode 100644 index 0000000..911fc42 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ProxyResource.m @@ -0,0 +1,40 @@ +classdef ProxyResource < adx.control.JSONMapper +% ProxyResource The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location +% +% ProxyResource Properties: +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ProxyResource(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ProxyResource + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabase.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabase.m new file mode 100644 index 0000000..de55aaa --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabase.m @@ -0,0 +1,43 @@ +classdef ReadOnlyFollowingDatabase < adx.control.JSONMapper +% ReadOnlyFollowingDatabase Class representing a read only following database. +% +% ReadOnlyFollowingDatabase Properties: +% xproperties - type: ReadOnlyFollowingDatabaseProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: ReadOnlyFollowingDatabaseProperties_1 + xproperties adx.control.models.ReadOnlyFollowingDatabaseProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ReadOnlyFollowingDatabase(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadOnlyFollowingDatabase + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.m new file mode 100644 index 0000000..7a1258a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000.m @@ -0,0 +1,16 @@ +classdef ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 < adx.control.JSONEnum +% ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Union ("Union") + Replace ("Replace") + None ("None") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.m new file mode 100644 index 0000000..0a81db3 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001.m @@ -0,0 +1,16 @@ +classdef ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 < adx.control.JSONEnum +% ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Union ("Union") + Replace ("Replace") + None ("None") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties.m new file mode 100644 index 0000000..36816aa --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties.m @@ -0,0 +1,64 @@ +classdef ReadOnlyFollowingDatabaseProperties < adx.control.JSONMapper +% ReadOnlyFollowingDatabaseProperties Class representing the Kusto database properties. +% +% ReadOnlyFollowingDatabaseProperties Properties: +% provisioningState - type: ProvisioningState +% softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string +% hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string +% statistics - type: DatabaseStatistics +% leaderClusterResourceId - The name of the leader cluster - type: string +% attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string +% principalsModificationKind - The principals modification kind of the database - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties +% originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string +% databaseShareOrigin - type: DatabaseShareOrigin +% suspensionDetails - type: SuspensionDetails + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + softDeletePeriod string { adx.control.JSONMapper.fieldName(softDeletePeriod,"softDeletePeriod") } + % hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + hotCachePeriod string { adx.control.JSONMapper.fieldName(hotCachePeriod,"hotCachePeriod") } + % statistics - type: DatabaseStatistics + statistics adx.control.models.DatabaseStatistics { adx.control.JSONMapper.fieldName(statistics,"statistics") } + % leaderClusterResourceId - The name of the leader cluster - type: string + leaderClusterResourceId string { adx.control.JSONMapper.fieldName(leaderClusterResourceId,"leaderClusterResourceId") } + % attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + attachedDatabaseConfigurationName string { adx.control.JSONMapper.fieldName(attachedDatabaseConfigurationName,"attachedDatabaseConfigurationName") } + % principalsModificationKind - The principals modification kind of the database - type: string + principalsModificationKind adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0000 { adx.control.JSONMapper.fieldName(principalsModificationKind,"principalsModificationKind") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + % originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + originalDatabaseName string { adx.control.JSONMapper.fieldName(originalDatabaseName,"originalDatabaseName") } + % databaseShareOrigin - type: DatabaseShareOrigin + databaseShareOrigin adx.control.models.DatabaseShareOrigin { adx.control.JSONMapper.fieldName(databaseShareOrigin,"databaseShareOrigin") } + % suspensionDetails - type: SuspensionDetails + suspensionDetails { adx.control.JSONMapper.fieldName(suspensionDetails,"suspensionDetails") } + end + + % Class methods + methods + % Constructor + function obj = ReadOnlyFollowingDatabaseProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadOnlyFollowingDatabaseProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties_1.m new file mode 100644 index 0000000..b87e566 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadOnlyFollowingDatabaseProperties_1.m @@ -0,0 +1,64 @@ +classdef ReadOnlyFollowingDatabaseProperties_1 < adx.control.JSONMapper +% ReadOnlyFollowingDatabaseProperties_1 Class representing the Kusto database properties. +% +% ReadOnlyFollowingDatabaseProperties_1 Properties: +% provisioningState - type: ProvisioningState +% softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string +% hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string +% statistics - type: DatabaseStatistics +% leaderClusterResourceId - The name of the leader cluster - type: string +% attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string +% principalsModificationKind - The principals modification kind of the database - type: string +% tableLevelSharingProperties - type: TableLevelSharingProperties +% originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string +% databaseShareOrigin - type: DatabaseShareOrigin +% suspensionDetails - type: SuspensionDetails + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + softDeletePeriod string { adx.control.JSONMapper.fieldName(softDeletePeriod,"softDeletePeriod") } + % hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + hotCachePeriod string { adx.control.JSONMapper.fieldName(hotCachePeriod,"hotCachePeriod") } + % statistics - type: DatabaseStatistics + statistics adx.control.models.DatabaseStatistics { adx.control.JSONMapper.fieldName(statistics,"statistics") } + % leaderClusterResourceId - The name of the leader cluster - type: string + leaderClusterResourceId string { adx.control.JSONMapper.fieldName(leaderClusterResourceId,"leaderClusterResourceId") } + % attachedDatabaseConfigurationName - The name of the attached database configuration cluster - type: string + attachedDatabaseConfigurationName string { adx.control.JSONMapper.fieldName(attachedDatabaseConfigurationName,"attachedDatabaseConfigurationName") } + % principalsModificationKind - The principals modification kind of the database - type: string + principalsModificationKind adx.control.models.ReadOnlyFollowingDatabaseProPrincipalsModificationKindEnum_0001 { adx.control.JSONMapper.fieldName(principalsModificationKind,"principalsModificationKind") } + % tableLevelSharingProperties - type: TableLevelSharingProperties + tableLevelSharingProperties { adx.control.JSONMapper.fieldName(tableLevelSharingProperties,"tableLevelSharingProperties") } + % originalDatabaseName - The original database name, before databaseNameOverride or databaseNamePrefix where applied. - type: string + originalDatabaseName string { adx.control.JSONMapper.fieldName(originalDatabaseName,"originalDatabaseName") } + % databaseShareOrigin - type: DatabaseShareOrigin + databaseShareOrigin adx.control.models.DatabaseShareOrigin { adx.control.JSONMapper.fieldName(databaseShareOrigin,"databaseShareOrigin") } + % suspensionDetails - type: SuspensionDetails + suspensionDetails { adx.control.JSONMapper.fieldName(suspensionDetails,"suspensionDetails") } + end + + % Class methods + methods + % Constructor + function obj = ReadOnlyFollowingDatabaseProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadOnlyFollowingDatabaseProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabase.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabase.m new file mode 100644 index 0000000..b668479 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabase.m @@ -0,0 +1,43 @@ +classdef ReadWriteDatabase < adx.control.JSONMapper +% ReadWriteDatabase Class representing a read write database. +% +% ReadWriteDatabase Properties: +% xproperties - type: ReadWriteDatabaseProperties_1 +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: ReadWriteDatabaseProperties_1 + xproperties adx.control.models.ReadWriteDatabaseProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ReadWriteDatabase(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadWriteDatabase + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties.m new file mode 100644 index 0000000..cfc1953 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties.m @@ -0,0 +1,52 @@ +classdef ReadWriteDatabaseProperties < adx.control.JSONMapper +% ReadWriteDatabaseProperties Class representing the Kusto database properties. +% +% ReadWriteDatabaseProperties Properties: +% provisioningState - type: ProvisioningState +% softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string +% hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string +% statistics - type: DatabaseStatistics +% isFollowed - Indicates whether the database is followed. - type: logical +% keyVaultProperties - type: KeyVaultProperties +% suspensionDetails - type: SuspensionDetails + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + softDeletePeriod string { adx.control.JSONMapper.fieldName(softDeletePeriod,"softDeletePeriod") } + % hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + hotCachePeriod string { adx.control.JSONMapper.fieldName(hotCachePeriod,"hotCachePeriod") } + % statistics - type: DatabaseStatistics + statistics adx.control.models.DatabaseStatistics { adx.control.JSONMapper.fieldName(statistics,"statistics") } + % isFollowed - Indicates whether the database is followed. - type: logical + isFollowed logical { adx.control.JSONMapper.fieldName(isFollowed,"isFollowed") } + % keyVaultProperties - type: KeyVaultProperties + keyVaultProperties { adx.control.JSONMapper.fieldName(keyVaultProperties,"keyVaultProperties") } + % suspensionDetails - type: SuspensionDetails + suspensionDetails { adx.control.JSONMapper.fieldName(suspensionDetails,"suspensionDetails") } + end + + % Class methods + methods + % Constructor + function obj = ReadWriteDatabaseProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadWriteDatabaseProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties_1.m new file mode 100644 index 0000000..33d7454 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ReadWriteDatabaseProperties_1.m @@ -0,0 +1,52 @@ +classdef ReadWriteDatabaseProperties_1 < adx.control.JSONMapper +% ReadWriteDatabaseProperties_1 Class representing the Kusto database properties. +% +% ReadWriteDatabaseProperties_1 Properties: +% provisioningState - type: ProvisioningState +% softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string +% hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string +% statistics - type: DatabaseStatistics +% isFollowed - Indicates whether the database is followed. - type: logical +% keyVaultProperties - type: KeyVaultProperties +% suspensionDetails - type: SuspensionDetails + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + % softDeletePeriod - The time the data should be kept before it stops being accessible to queries in TimeSpan. - type: string + softDeletePeriod string { adx.control.JSONMapper.fieldName(softDeletePeriod,"softDeletePeriod") } + % hotCachePeriod - The time the data should be kept in cache for fast queries in TimeSpan. - type: string + hotCachePeriod string { adx.control.JSONMapper.fieldName(hotCachePeriod,"hotCachePeriod") } + % statistics - type: DatabaseStatistics + statistics adx.control.models.DatabaseStatistics { adx.control.JSONMapper.fieldName(statistics,"statistics") } + % isFollowed - Indicates whether the database is followed. - type: logical + isFollowed logical { adx.control.JSONMapper.fieldName(isFollowed,"isFollowed") } + % keyVaultProperties - type: KeyVaultProperties + keyVaultProperties { adx.control.JSONMapper.fieldName(keyVaultProperties,"keyVaultProperties") } + % suspensionDetails - type: SuspensionDetails + suspensionDetails { adx.control.JSONMapper.fieldName(suspensionDetails,"suspensionDetails") } + end + + % Class methods + methods + % Constructor + function obj = ReadWriteDatabaseProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ReadWriteDatabaseProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Resource.m b/Software/MATLAB/app/system/+adx/+control/+models/Resource.m new file mode 100644 index 0000000..3ddacf3 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Resource.m @@ -0,0 +1,40 @@ +classdef Resource < adx.control.JSONMapper +% Resource Common fields that are returned in the response for all Azure Resource Manager resources +% +% Resource Properties: +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = Resource(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Resource + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuCapabilities.m b/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuCapabilities.m new file mode 100644 index 0000000..1c96b8b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuCapabilities.m @@ -0,0 +1,37 @@ +classdef ResourceSkuCapabilities < adx.control.JSONMapper +% ResourceSkuCapabilities Describes The SKU capabilities object. +% +% ResourceSkuCapabilities Properties: +% name - An invariant to describe the feature. - type: string +% value - An invariant if the feature is measured by quantity. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - An invariant to describe the feature. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % value - An invariant if the feature is measured by quantity. - type: string + value string { adx.control.JSONMapper.fieldName(value,"value") } + end + + % Class methods + methods + % Constructor + function obj = ResourceSkuCapabilities(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ResourceSkuCapabilities + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuZoneDetails.m b/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuZoneDetails.m new file mode 100644 index 0000000..080fecb --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ResourceSkuZoneDetails.m @@ -0,0 +1,37 @@ +classdef ResourceSkuZoneDetails < adx.control.JSONMapper +% ResourceSkuZoneDetails Describes The zonal capabilities of a SKU. +% +% ResourceSkuZoneDetails Properties: +% name - The set of zones that the SKU is available in with the specified capabilities. - type: array of string +% capabilities - A list of capabilities that are available for the SKU in the specified list of zones. - type: array of ResourceSkuCapabilities + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - The set of zones that the SKU is available in with the specified capabilities. - type: array of string + name string { adx.control.JSONMapper.fieldName(name,"name"), adx.control.JSONMapper.JSONArray } + % capabilities - A list of capabilities that are available for the SKU in the specified list of zones. - type: array of ResourceSkuCapabilities + capabilities adx.control.models.ResourceSkuCapabilities { adx.control.JSONMapper.fieldName(capabilities,"capabilities"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ResourceSkuZoneDetails(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ResourceSkuZoneDetails + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Script.m b/Software/MATLAB/app/system/+adx/+control/+models/Script.m new file mode 100644 index 0000000..0e692f3 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Script.m @@ -0,0 +1,46 @@ +classdef Script < adx.control.JSONMapper +% Script Class representing a database script. +% +% Script Properties: +% xproperties - type: ScriptProperties_1 +% systemData - type: systemData +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % xproperties - type: ScriptProperties_1 + xproperties adx.control.models.ScriptProperties_1 { adx.control.JSONMapper.fieldName(xproperties,"properties") } + % systemData - type: systemData + systemData adx.control.models.systemData { adx.control.JSONMapper.fieldName(systemData,"systemData") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = Script(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.Script + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequest.m b/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequest.m new file mode 100644 index 0000000..3e690fd --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequest.m @@ -0,0 +1,37 @@ +classdef ScriptCheckNameRequest < adx.control.JSONMapper +% ScriptCheckNameRequest A script name availability request. +% +% ScriptCheckNameRequest Properties: +% name - Script name. - type: string +% type - The type of resource, Microsoft.Kusto/clusters/databases/scripts. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % name - Script name. - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of resource, Microsoft.Kusto/clusters/databases/scripts. - type: string + type adx.control.models.ScriptCheckNameRequestTypeEnum { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = ScriptCheckNameRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ScriptCheckNameRequest + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequestTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequestTypeEnum.m new file mode 100644 index 0000000..18aed6c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ScriptCheckNameRequestTypeEnum.m @@ -0,0 +1,14 @@ +classdef ScriptCheckNameRequestTypeEnum < adx.control.JSONEnum +% ScriptCheckNameRequestTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Microsoft_Kusto_clusters_databases_scripts ("Microsoft.Kusto/clusters/databases/scripts") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ScriptListResult.m b/Software/MATLAB/app/system/+adx/+control/+models/ScriptListResult.m new file mode 100644 index 0000000..39dec0c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ScriptListResult.m @@ -0,0 +1,34 @@ +classdef ScriptListResult < adx.control.JSONMapper +% ScriptListResult The list Kusto database script operation response. +% +% ScriptListResult Properties: +% value - The list of Kusto scripts. - type: array of Script + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - The list of Kusto scripts. - type: array of Script + value adx.control.models.Script { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = ScriptListResult(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ScriptListResult + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties.m new file mode 100644 index 0000000..6fe1575 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties.m @@ -0,0 +1,49 @@ +classdef ScriptProperties < adx.control.JSONMapper +% ScriptProperties A class representing database script property. +% +% ScriptProperties Properties: +% scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string +% scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string +% scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string +% forceUpdateTag - A unique string. If changed the script will be applied again. - type: string +% continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrl string { adx.control.JSONMapper.fieldName(scriptUrl,"scriptUrl") } + % scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptUrlSasToken string { adx.control.JSONMapper.fieldName(scriptUrlSasToken,"scriptUrlSasToken") } + % scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + scriptContent string { adx.control.JSONMapper.fieldName(scriptContent,"scriptContent") } + % forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + forceUpdateTag string { adx.control.JSONMapper.fieldName(forceUpdateTag,"forceUpdateTag") } + % continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + continueOnErrors logical { adx.control.JSONMapper.fieldName(continueOnErrors,"continueOnErrors") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = ScriptProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ScriptProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties_1.m b/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties_1.m new file mode 100644 index 0000000..b506cc4 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/ScriptProperties_1.m @@ -0,0 +1,49 @@ +classdef ScriptProperties_1 < adx.control.JSONMapper +% ScriptProperties_1 A class representing database script property. +% +% ScriptProperties_1 Properties: +% scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string +% scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string +% scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string +% forceUpdateTag - A unique string. If changed the script will be applied again. - type: string +% continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical +% provisioningState - type: ProvisioningState + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % scriptUrl - The url to the KQL script blob file. Must not be used together with scriptContent property - type: string + scriptUrl string { adx.control.JSONMapper.fieldName(scriptUrl,"scriptUrl") } + % scriptUrlSasToken - The SaS token that provide read access to the file which contain the script. Must be provided when using scriptUrl property. - type: string + scriptUrlSasToken string { adx.control.JSONMapper.fieldName(scriptUrlSasToken,"scriptUrlSasToken") } + % scriptContent - The script content. This property should be used when the script is provide inline and not through file in a SA. Must not be used together with scriptUrl and scriptUrlSasToken properties. - type: string + scriptContent string { adx.control.JSONMapper.fieldName(scriptContent,"scriptContent") } + % forceUpdateTag - A unique string. If changed the script will be applied again. - type: string + forceUpdateTag string { adx.control.JSONMapper.fieldName(forceUpdateTag,"forceUpdateTag") } + % continueOnErrors - Flag that indicates whether to continue if one of the command fails. - type: logical + continueOnErrors logical { adx.control.JSONMapper.fieldName(continueOnErrors,"continueOnErrors") } + % provisioningState - type: ProvisioningState + provisioningState adx.control.models.ProvisioningState { adx.control.JSONMapper.fieldName(provisioningState,"provisioningState") } + end + + % Class methods + methods + % Constructor + function obj = ScriptProperties_1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.ScriptProperties_1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/SkuDescription.m b/Software/MATLAB/app/system/+adx/+control/+models/SkuDescription.m new file mode 100644 index 0000000..3b14762 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/SkuDescription.m @@ -0,0 +1,49 @@ +classdef SkuDescription < adx.control.JSONMapper +% SkuDescription The Kusto SKU description of given resource type +% +% SkuDescription Properties: +% resourceType - The resource type - type: string +% name - The name of the SKU - type: string +% tier - The tier of the SKU - type: string +% locations - The set of locations that the SKU is available - type: array of string +% locationInfo - Locations and zones - type: array of SkuLocationInfoItem +% restrictions - The restrictions because of which SKU cannot be used - type: array of object + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % resourceType - The resource type - type: string + resourceType string { adx.control.JSONMapper.fieldName(resourceType,"resourceType") } + % name - The name of the SKU - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % tier - The tier of the SKU - type: string + tier string { adx.control.JSONMapper.fieldName(tier,"tier") } + % locations - The set of locations that the SKU is available - type: array of string + locations string { adx.control.JSONMapper.fieldName(locations,"locations"), adx.control.JSONMapper.JSONArray } + % locationInfo - Locations and zones - type: array of SkuLocationInfoItem + locationInfo adx.control.models.SkuLocationInfoItem { adx.control.JSONMapper.fieldName(locationInfo,"locationInfo"), adx.control.JSONMapper.JSONArray } + % restrictions - The restrictions because of which SKU cannot be used - type: array of object + restrictions { adx.control.JSONMapper.fieldName(restrictions,"restrictions"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = SkuDescription(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.SkuDescription + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/SkuDescriptionList.m b/Software/MATLAB/app/system/+adx/+control/+models/SkuDescriptionList.m new file mode 100644 index 0000000..911d05b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/SkuDescriptionList.m @@ -0,0 +1,34 @@ +classdef SkuDescriptionList < adx.control.JSONMapper +% SkuDescriptionList The list of the EngagementFabric SKU descriptions +% +% SkuDescriptionList Properties: +% value - SKU descriptions - type: array of SkuDescription + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - SKU descriptions - type: array of SkuDescription + value adx.control.models.SkuDescription { adx.control.JSONMapper.fieldName(value,"value"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = SkuDescriptionList(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.SkuDescriptionList + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/SkuLocationInfoItem.m b/Software/MATLAB/app/system/+adx/+control/+models/SkuLocationInfoItem.m new file mode 100644 index 0000000..08c98eb --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/SkuLocationInfoItem.m @@ -0,0 +1,40 @@ +classdef SkuLocationInfoItem < adx.control.JSONMapper +% SkuLocationInfoItem The locations and zones info for SKU. +% +% SkuLocationInfoItem Properties: +% location - The available location of the SKU. - type: string +% zones - The available zone of the SKU. - type: array of string +% zoneDetails - Gets details of capabilities available to a SKU in specific zones. - type: array of ResourceSkuZoneDetails + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % location - The available location of the SKU. - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % zones - The available zone of the SKU. - type: array of string + zones string { adx.control.JSONMapper.fieldName(zones,"zones"), adx.control.JSONMapper.JSONArray } + % zoneDetails - Gets details of capabilities available to a SKU in specific zones. - type: array of ResourceSkuZoneDetails + zoneDetails adx.control.models.ResourceSkuZoneDetails { adx.control.JSONMapper.fieldName(zoneDetails,"zoneDetails"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = SkuLocationInfoItem(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.SkuLocationInfoItem + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/Status.m b/Software/MATLAB/app/system/+adx/+control/+models/Status.m new file mode 100644 index 0000000..2b5988c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/Status.m @@ -0,0 +1,17 @@ +classdef Status < adx.control.JSONEnum +% Status The status of operation. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + Succeeded ("Succeeded") + Canceled ("Canceled") + Failed ("Failed") + Running ("Running") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/SuspensionDetails.m b/Software/MATLAB/app/system/+adx/+control/+models/SuspensionDetails.m new file mode 100644 index 0000000..db58c7b --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/SuspensionDetails.m @@ -0,0 +1,34 @@ +classdef SuspensionDetails < adx.control.JSONMapper +% SuspensionDetails The database suspension details. If the database is suspended, this object contains information related to the database''s suspension state. +% +% SuspensionDetails Properties: +% suspensionStartDate - The starting date and time of the suspension state. - type: datetime + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % suspensionStartDate - The starting date and time of the suspension state. - type: datetime + suspensionStartDate datetime { adx.control.JSONMapper.stringDatetime(suspensionStartDate,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(suspensionStartDate,"suspensionStartDate") } + end + + % Class methods + methods + % Constructor + function obj = SuspensionDetails(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.SuspensionDetails + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/TableLevelSharingProperties.m b/Software/MATLAB/app/system/+adx/+control/+models/TableLevelSharingProperties.m new file mode 100644 index 0000000..4e68c38 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/TableLevelSharingProperties.m @@ -0,0 +1,55 @@ +classdef TableLevelSharingProperties < adx.control.JSONMapper +% TableLevelSharingProperties Tables that will be included and excluded in the follower database +% +% TableLevelSharingProperties Properties: +% tablesToInclude - List of tables to include in the follower database - type: array of string +% tablesToExclude - List of tables to exclude from the follower database - type: array of string +% externalTablesToInclude - List of external tables to include in the follower database - type: array of string +% externalTablesToExclude - List of external tables to exclude from the follower database - type: array of string +% materializedViewsToInclude - List of materialized views to include in the follower database - type: array of string +% materializedViewsToExclude - List of materialized views to exclude from the follower database - type: array of string +% functionsToInclude - List of functions to include in the follower database - type: array of string +% functionsToExclude - List of functions to exclude from the follower database - type: array of string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % tablesToInclude - List of tables to include in the follower database - type: array of string + tablesToInclude string { adx.control.JSONMapper.fieldName(tablesToInclude,"tablesToInclude"), adx.control.JSONMapper.JSONArray } + % tablesToExclude - List of tables to exclude from the follower database - type: array of string + tablesToExclude string { adx.control.JSONMapper.fieldName(tablesToExclude,"tablesToExclude"), adx.control.JSONMapper.JSONArray } + % externalTablesToInclude - List of external tables to include in the follower database - type: array of string + externalTablesToInclude string { adx.control.JSONMapper.fieldName(externalTablesToInclude,"externalTablesToInclude"), adx.control.JSONMapper.JSONArray } + % externalTablesToExclude - List of external tables to exclude from the follower database - type: array of string + externalTablesToExclude string { adx.control.JSONMapper.fieldName(externalTablesToExclude,"externalTablesToExclude"), adx.control.JSONMapper.JSONArray } + % materializedViewsToInclude - List of materialized views to include in the follower database - type: array of string + materializedViewsToInclude string { adx.control.JSONMapper.fieldName(materializedViewsToInclude,"materializedViewsToInclude"), adx.control.JSONMapper.JSONArray } + % materializedViewsToExclude - List of materialized views to exclude from the follower database - type: array of string + materializedViewsToExclude string { adx.control.JSONMapper.fieldName(materializedViewsToExclude,"materializedViewsToExclude"), adx.control.JSONMapper.JSONArray } + % functionsToInclude - List of functions to include in the follower database - type: array of string + functionsToInclude string { adx.control.JSONMapper.fieldName(functionsToInclude,"functionsToInclude"), adx.control.JSONMapper.JSONArray } + % functionsToExclude - List of functions to exclude from the follower database - type: array of string + functionsToExclude string { adx.control.JSONMapper.fieldName(functionsToExclude,"functionsToExclude"), adx.control.JSONMapper.JSONArray } + end + + % Class methods + methods + % Constructor + function obj = TableLevelSharingProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.TableLevelSharingProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/The_object_that_describes_the_operation_.m b/Software/MATLAB/app/system/+adx/+control/+models/The_object_that_describes_the_operation_.m new file mode 100644 index 0000000..1aaf8da --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/The_object_that_describes_the_operation_.m @@ -0,0 +1,43 @@ +classdef The_object_that_describes_the_operation_ < adx.control.JSONMapper +% The_object_that_describes_the_operation_ No description provided +% +% The_object_that_describes_the_operation_ Properties: +% provider - type: string +% operation - For example: read, write, delete. - type: string +% resource - type: string +% description - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % provider - type: string + provider string { adx.control.JSONMapper.fieldName(provider,"provider") } + % operation - For example: read, write, delete. - type: string + operation string { adx.control.JSONMapper.fieldName(operation,"operation") } + % resource - type: string + resource string { adx.control.JSONMapper.fieldName(resource,"resource") } + % description - type: string + description string { adx.control.JSONMapper.fieldName(description,"description") } + end + + % Class methods + methods + % Constructor + function obj = The_object_that_describes_the_operation_(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.The_object_that_describes_the_operation_ + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/TrackedResource.m b/Software/MATLAB/app/system/+adx/+control/+models/TrackedResource.m new file mode 100644 index 0000000..785c524 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/TrackedResource.m @@ -0,0 +1,46 @@ +classdef TrackedResource < adx.control.JSONMapper +% TrackedResource The resource model definition for an Azure Resource Manager tracked top level resource which has ''tags'' and a ''location'' +% +% TrackedResource Properties: +% tags - Resource tags. - type: adx.control.JSONMapperMap +% location - The geo-location where the resource lives - type: string +% id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string +% name - The name of the resource - type: string +% type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % tags - Resource tags. - type: adx.control.JSONMapperMap + tags adx.control.JSONMapperMap { adx.control.JSONMapper.fieldName(tags,"tags") } + % location - The geo-location where the resource lives - type: string + location string { adx.control.JSONMapper.fieldName(location,"location") } + % id - Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - type: string + id string { adx.control.JSONMapper.fieldName(id,"id") } + % name - The name of the resource - type: string + name string { adx.control.JSONMapper.fieldName(name,"name") } + % type - The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or \"Microsoft.Storage/storageAccounts\" - type: string + type string { adx.control.JSONMapper.fieldName(type,"type") } + end + + % Class methods + methods + % Constructor + function obj = TrackedResource(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.TrackedResource + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/TrustedExternalTenant.m b/Software/MATLAB/app/system/+adx/+control/+models/TrustedExternalTenant.m new file mode 100644 index 0000000..04adfed --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/TrustedExternalTenant.m @@ -0,0 +1,34 @@ +classdef TrustedExternalTenant < adx.control.JSONMapper +% TrustedExternalTenant Represents a tenant ID that is trusted by the cluster. +% +% TrustedExternalTenant Properties: +% value - GUID representing an external tenant. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % value - GUID representing an external tenant. - type: string + value string { adx.control.JSONMapper.fieldName(value,"value") } + end + + % Class methods + methods + % Constructor + function obj = TrustedExternalTenant(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.TrustedExternalTenant + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/VirtualNetworkConfiguration.m b/Software/MATLAB/app/system/+adx/+control/+models/VirtualNetworkConfiguration.m new file mode 100644 index 0000000..08ac0da --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/VirtualNetworkConfiguration.m @@ -0,0 +1,40 @@ +classdef VirtualNetworkConfiguration < adx.control.JSONMapper +% VirtualNetworkConfiguration A class that contains virtual network definition. +% +% VirtualNetworkConfiguration Properties: +% subnetId - The subnet resource id. - type: string +% enginePublicIpId - Engine service''s public IP address resource id. - type: string +% dataManagementPublicIpId - Data management''s service public IP address resource id. - type: string + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % subnetId - The subnet resource id. - type: string + subnetId string { adx.control.JSONMapper.fieldName(subnetId,"subnetId") } + % enginePublicIpId - Engine service''s public IP address resource id. - type: string + enginePublicIpId string { adx.control.JSONMapper.fieldName(enginePublicIpId,"enginePublicIpId") } + % dataManagementPublicIpId - Data management''s service public IP address resource id. - type: string + dataManagementPublicIpId string { adx.control.JSONMapper.fieldName(dataManagementPublicIpId,"dataManagementPublicIpId") } + end + + % Class methods + methods + % Constructor + function obj = VirtualNetworkConfiguration(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.VirtualNetworkConfiguration + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/systemData.m b/Software/MATLAB/app/system/+adx/+control/+models/systemData.m new file mode 100644 index 0000000..716db7d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/systemData.m @@ -0,0 +1,49 @@ +classdef systemData < adx.control.JSONMapper +% systemData Metadata pertaining to creation and last modification of the resource. +% +% systemData Properties: +% createdBy - The identity that created the resource. - type: string +% createdByType - The type of identity that created the resource. - type: string +% createdAt - The timestamp of resource creation (UTC). - type: datetime +% lastModifiedBy - The identity that last modified the resource. - type: string +% lastModifiedByType - The type of identity that last modified the resource. - type: string +% lastModifiedAt - The timestamp of resource last modification (UTC) - type: datetime + +% This file is automatically generated using OpenAPI +% Specification version: 2023-05-02 +% MATLAB Generator for OpenAPI version: 1.0.0 +% (c) 2023 MathWorks Inc. + + % Class properties + properties + % createdBy - The identity that created the resource. - type: string + createdBy string { adx.control.JSONMapper.fieldName(createdBy,"createdBy") } + % createdByType - The type of identity that created the resource. - type: string + createdByType adx.control.models.systemDataCreatedByTypeEnum { adx.control.JSONMapper.fieldName(createdByType,"createdByType") } + % createdAt - The timestamp of resource creation (UTC). - type: datetime + createdAt datetime { adx.control.JSONMapper.stringDatetime(createdAt,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(createdAt,"createdAt") } + % lastModifiedBy - The identity that last modified the resource. - type: string + lastModifiedBy string { adx.control.JSONMapper.fieldName(lastModifiedBy,"lastModifiedBy") } + % lastModifiedByType - The type of identity that last modified the resource. - type: string + lastModifiedByType adx.control.models.systemDataLastModifiedByTypeEnum { adx.control.JSONMapper.fieldName(lastModifiedByType,"lastModifiedByType") } + % lastModifiedAt - The timestamp of resource last modification (UTC) - type: datetime + lastModifiedAt datetime { adx.control.JSONMapper.stringDatetime(lastModifiedAt,'yyyy-MM-dd''T''HH:mm:ss.SSSZ', 'TimeZone', 'local'), adx.control.JSONMapper.fieldName(lastModifiedAt,"lastModifiedAt") } + end + + % Class methods + methods + % Constructor + function obj = systemData(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.control.models.systemData + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/systemDataCreatedByTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/systemDataCreatedByTypeEnum.m new file mode 100644 index 0000000..9dd3497 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/systemDataCreatedByTypeEnum.m @@ -0,0 +1,17 @@ +classdef systemDataCreatedByTypeEnum < adx.control.JSONEnum +% systemDataCreatedByTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + User ("User") + Application ("Application") + ManagedIdentity ("ManagedIdentity") + Key ("Key") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/+models/systemDataLastModifiedByTypeEnum.m b/Software/MATLAB/app/system/+adx/+control/+models/systemDataLastModifiedByTypeEnum.m new file mode 100644 index 0000000..89c1864 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/+models/systemDataLastModifiedByTypeEnum.m @@ -0,0 +1,17 @@ +classdef systemDataLastModifiedByTypeEnum < adx.control.JSONEnum +% systemDataLastModifiedByTypeEnum No description provided + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + enumeration + User ("User") + Application ("Application") + ManagedIdentity ("ManagedIdentity") + Key ("Key") + end + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+control/BaseClient.m b/Software/MATLAB/app/system/+adx/+control/BaseClient.m new file mode 100644 index 0000000..292247f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/BaseClient.m @@ -0,0 +1,378 @@ +classdef (Abstract) BaseClient < handle & matlab.mixin.CustomDisplay + % BASECLIENT Base class for RESTful adx services. + % Includes common initialization and authentication code. Authentication + % code may have to be manually updated after code generation. + % + % This class cannot be instantiated directly, work with classes derived + % from it to actually interact with the RESTful service. + + % This file is automatically generated using OpenAPI + % Specification version: 2023-05-02 + % MATLAB Generator for OpenAPI version: 1.0.0 + % (c) 2023 MathWorks Inc. + + properties + % Base URI to use when calling the API. Allows using a different server + % than specified in the original API spec. + serverUri matlab.net.URI + + % HTTPOptions used by all requests. + httpOptions = matlab.net.http.HTTPOptions; + + % If operation supports multiple authentication methods, specified which + % method to prefer. + preferredAuthMethod = string.empty; + + % If Bearer token authentication is used, the token can be supplied + % here. Note the token is only used if operations are called for which + % the API explicitly specified that Bearer authentication is supported. + % If this has not been specified in the spec but most operations do + % require Bearer authentication consider adding the relevant header to + % all requests in the preSend method. + bearerToken = string.empty; + + % If API key authentication is used, the key can be supplied here. + % Note the key is only used if operations are called for which + % the API explicitly specified that API key authentication is supported. + % If this has not been specified in the spec but most operations do + % require API key authentication consider adding the API key to all + % requests in the preSend method. + apiKey = string.empty; + + % If Basic or Digest authentication is supported username/password + % credentials can be supplied here as matlab.net.http.Credentials. Note + % these are only actively used if operations are called for which the + % API spec has specified they require Basic authentication. If this has + % not been set specified in the spec but most operations do require + % Basic authentication consider setting the Credentials property in the + % httpOptions rather than through httpCredentials. + httpCredentials = matlab.net.http.Credentials.empty; + + apiVersion = "2022-11-11"; + + subscriptionId string; + + tenantId string; + + clientId string; + + clientSecret string; + + database string; + + resourceGroup string; + + cluster string; + + ingestCluster string; + + scopes string; + + dataBearerToken = string.empty; + + controlBearerToken = string.empty; + end + + properties (Constant) + % Cookie jar. The cookie jar is shared across all Api classes in the + % same package. All responses are automatically parsed for Set-Cookie + % headers and cookies are automatically added to the jar. Similarly + % cookies are added to outgoing requests if there are matching cookies + % in the jar for the given request. Cookies can also be added manually + % by calling the setCookies method on the cookies property. The cookie + % jar is also saved to disk (cookies.mat in the same directory as + % BaseClient) and reloaded in new MATLAB sessions. + cookies = adx.control.CookieJar(fileparts(mfilename('fullpath'))); + end + + methods + function obj = BaseClient(options) + % adx.control.BaseClient constructor to be called from + % derived classes to allow setting properties upon construction + arguments + options.configFile string + options.?adx.control.BaseClient + end + % If there no specific file supplied as input but there is a + % JSON file for the package, use that file + if ~isfield(options,"configFile") && isfile(which("adx.Client.Settings.json")) + options.configFile = which("adx.Client.Settings.json"); + end + % If there is a specific configuration file supplied as input + if isfield(options,"configFile") + % Load configuration from configuration file + obj.loadConfigFile(options.configFile); + % Remove the field to continue overloading any further options + options = rmfield(options,'configFile'); + end + % Set/override other parameters provided as input + for p = string(fieldnames(options))' + obj.(p) = options.(p); + end + + if isempty(obj.ingestCluster) || strlength(obj.ingestCluster) == 0 + if isempty(obj.cluster) || strlength(obj.cluster) == 0 + warning("adx:BaseClient", "Cluster property not set cannot set default ingestCluster"); + else + if ~startsWith(obj.cluster, 'https://') + error("adx:BaseClient", "Expected cluster to start with 'https://' : %s", obj.cluster); + elseif startsWith(obj.cluster, 'https://ingest-') + warning("adx:BaseClient", "Not expecting base cluster hostname to start with ingest-: %s", obj.cluster); + obj.ingestCluster = obj.cluster; + else + obj.ingestCluster = strrep(obj.cluster, 'https://', 'https://ingest-'); + %fprintf('Setting default ingest cluster to: %s\n', obj.ingestCluster') + end + end + end + end + end % public methods + + methods (Access=protected) + + function request = applyCookies(obj, request, uri) + c = obj.cookies.getCookies(uri); + if ~isempty(c) + request = request.addFields(matlab.net.http.field.CookieField(c)); + end + end + + function setCookies(obj, history) + cookieInfos = matlab.net.http.CookieInfo.collectFromLog(history); + if ~isempty(cookieInfos) + obj.cookies.setCookies(cookieInfos); + end + end + + function [request, httpOptions, uri] = requestAuth(obj, authNames, request, httpOptions, uri) + % REQUESTAUTH will be called by operations which require + % authentication. May have to be extended or modified after code + % generation. For example, authentication methods not present in the + % service OpenAPI spec or methods not directly supported by the + % generator will have to be added. Generated logic may also not be + % 100% correct if the OpenAPI spec contained multiple different + % authentication methods of the same type. + + % If a preferred authentication method is specified and supported + % by the operation which called requestAuth, use the preferred + % otherwise use the first if there are multiple. + if ~isempty(obj.preferredAuthMethod) && contains(obj.preferredAuthMethod, authNames) + authName = obj.preferredAuthMethod; + else + authName = authNames(1); + end + + switch lower(authName) + case {'clientsecret', 'interactivebrowser', 'devicecode', 'managedidentity'} + % Supported OAuth modes, calls getOAuthToken and adds returned token as Bearer authorization header. + request.Header(end+1) = matlab.net.http.field.AuthorizationField("Authorization","Bearer " + string(obj.getOAuthToken(authName))); + otherwise + error("adx:requestAuth", "Operation requested an authentication method which is not supported") + end + end + + function token = getOAuthToken(obj, mode) + % GETOAUTHTOKEN called by requestAuth to obtain OAuth token. + % + % To be customized after code generation. + % + % This template method simply returns the bearerToken of the object + % which is assumed to have been manually set after manually having + % completed the OAuth flow. Typically this method should be + % customized to return a properly cached still valid token, refresh + % an cached expired token just-in-time or perform the entire OAuth + % flow from the start just-in-time and cache the token. + % + % As the exact OAuth flow may vary by OAuth provider, the full + % authentication flow is not automatically generated and the + % template method simply returns the bearerToken property. + + % If there is no bearer token set do auth otherwise use the + % existing token + % if ~isempty(obj.bearerToken) && strlength(obj.bearerToken) > 0 + % jwt = mathworks.utils.jwt.JWT(obj.bearerToken); + % if jwt.isTimeValid + % token = obj.bearerToken; + % return; + % else + % fprintf("Authentication token time invalid (UTC): Expiry: %s, Not Before: %s, updating.\n", string(jwt.expiryTime), string(jwt.notBeforeTime)); + % end + % end + + if isprop(obj, 'dataplane') && obj.dataplane + if ~isempty(obj.dataBearerToken) && strlength(obj.dataBearerToken) > 0 + jwt = mathworks.utils.jwt.JWT(obj.dataBearerToken); + if jwt.isTimeValid + token = obj.dataBearerToken; + return; + else + fprintf("Authentication token time invalid (UTC): Not Before: %s, Expiry: %s, Updating.\n", string(jwt.notBeforeTime), string(jwt.expiryTime)); + end + end + else + if ~isempty(obj.controlBearerToken) && strlength(obj.controlBearerToken) > 0 + jwt = mathworks.utils.jwt.JWT(obj.controlBearerToken); + if jwt.isTimeValid + token = obj.controlBearerToken; + return; + else + fprintf("Authentication token time invalid (UTC): Not Before: %s, Expiry: %s, Updating.\n", string(jwt.notBeforeTime), string(jwt.expiryTime)); + end + end + end + + % The code below can be uncommented and then used as a starting + % point to fully implement the OAuth flows for the flows specified + % in the API spec. + if ~(isprop(obj, 'clientId') && strlength(obj.clientId) > 0) + error("adx:getOAuthToken", "clientId value is not set"); + end + if ~(isprop(obj, 'tenantId') && strlength(obj.tenantId) > 0) + error("adx:getOAuthToken", "tenantId value is not set"); + end + switch lower(mode) + % Implicit Flow + % authorizationUrl = "https://login.microsoftonline.com/common/oauth2/authorize"; + % refreshUrl = ""; + + % % Scopes defined in spec + % scopes = [... + % "user_impersonation",... % impersonate your user account + % ]; + % Scopes defined in spec + + case "devicecode" + OA2Client = mathworks.utils.msOAuth2Client(obj.tenantId, obj.clientId, 'Method', mode); + + case "clientsecret" + if ~(isprop(obj, 'clientSecret') && strlength(obj.clientSecret) > 0) + error("adx:getOAuthToken", "clientSecret value is not set"); + end + OA2Client = mathworks.utils.msOAuth2Client(obj.tenantId, obj.clientId, obj.clientSecret, 'Method', mode); + + case "interactivebrowser" + serviceMetadataURI = matlab.net.URI(obj.cluster); + serviceMetadataURI.Path = 'v1/rest/auth/metadata'; + OA2Client = mathworks.utils.msOAuth2Client(obj.tenantId, obj.clientId, 'Method', mode, 'ServiceMetadataURI', serviceMetadataURI); + + case "managedidentity" + OA2Client = mathworks.utils.msOAuth2Client(obj.tenantId, obj.clientId, 'Method', mode); + + otherwise + error("adx:UnknownOAuth", "Operation requested an OAuth flow which was not specified in the OpenAPI spec."); + + end + if ~isempty(obj.scopes) && strlength(obj.scopes) > 0 + localScopes = obj.scopes; + else + if isprop(obj, 'dataplane') && obj.dataplane + localScopes = strcat(obj.cluster, '/.default'); + else + localScopes = "https://management.core.windows.net/.default"; + end + end + %fprintf("adx:azure_auth: Using scope(s): %s\n", localScopes); + + token = OA2Client.getToken(localScopes); + % Check if the returned token belongs to the data plane or control plane + if isprop(obj, 'dataplane') && obj.dataplane + if isstruct(token) + if isfield(token, 'accessToken') % Client Secret returns a struct + token = token.accessToken; + elseif isfield(token, 'token') % A plausible return value + token = token.token; + else + error("adx:UnexpectedToken", "An unexpected token struct was returned"); + end + end + obj.dataBearerToken = token; + mathworks.internal.adx.setDefaultConfigValue('dataBearerToken', token); + else + if isstruct(token) + if isfield(token, 'accessToken') % Client Secret returns a struct + token = token.accessToken; + elseif isfield(token, 'token') % A plausible return value + token = token.token; + else + error("adx:UnexpectedToken", "An unexpected token struct was returned"); + end + end + obj.controlBearerToken = token; + mathworks.internal.adx.setDefaultConfigValue('controlBearerToken', token); + end + % Don't set the bearerToken now as we're generally working with two + % obj.bearerToken = token; + end + + function [request, httpOptions, uri] = preSend(obj, operationId, request, httpOptions, uri) %#ok + % PRESEND is called by every operation right before sending the + % request. This method can for example be customized to add a + % header to all (or most) requests if needed. + % + % If the requests of only a few operations need to be customized + % it is recommended to modify the generated operation methods + % in the Api classes themselves rather than modifying preSend. + % + % By default the generated preSend does not do anything, it just + % returns the inputs as is. + + % Set authNames to preferredAuthMethod from the config file + [request, httpOptions, uri] = requestAuth(obj, obj.preferredAuthMethod, request, httpOptions, uri); + end + + function response = postSend(obj, operationId, response, request, uri, httpOptions) %#ok + % POSTSEND is called by every operation right after sending the + % request. This method can for example be customized to add + % customized error handling if the API responds to errors in a + % consistent way. + % + % If the responses of only a few operations need to be customized + % it is recommended to modify the generated operation methods + % in the Api classes themselves rather than modifying postSend. + % + % By default the generated postSend does not do anything, it just + % returns the response as is. + end + + function propgrp = getPropertyGroups(obj) + % Redact properties such that tokens, etc. do not show up + % in Command Window output + hide = ["bearerToken", "apiKey","httpCredentials"]; + propgrp = getPropertyGroups@matlab.mixin.CustomDisplay(obj); + for h = hide + if isempty(obj.(h)) + propgrp.PropertyList.(h) = ''; + else + propgrp.PropertyList.(h) = ''; + end + end + end + end % protected methods + + methods (Access=private) + function loadConfigFile(obj, filename) + % Loads client and http properties from a JSON file + try + settings = jsondecode(fileread(filename)); + catch ME + fprintf("Error, unable able to jsondecode settings file: %s\n", filename); + rethrow(ME); + end + mathworks.internal.adx.validateConfig(settings); + for f = string(fieldnames(settings))' + switch f + case 'httpOptions' + args = namedargs2cell(settings.httpOptions); + obj.httpOptions = matlab.net.http.HTTPOptions(args{:}); + case 'httpCredentials' + args = namedargs2cell(settings.httpCredentials); + obj.httpCredentials = matlab.net.http.Credentials(args{:}); + case 'cookies' + obj.cookies.load(settings.cookies.path); + otherwise + obj.(f) = settings.(f); + end + end + end + end % private methods +end %class diff --git a/Software/MATLAB/app/system/+adx/+control/CookieJar.m b/Software/MATLAB/app/system/+adx/+control/CookieJar.m new file mode 100644 index 0000000..bdb9f89 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/CookieJar.m @@ -0,0 +1,138 @@ +classdef CookieJar < handle + % COOKIEJAR helper class in MATLAB Generator for OpenAPI package, + % provides a cookie jar. A cookie jar holds cookies which are typically + % set by Set-Cookie headers in HTTP(S) requests and it can return the + % cookies which should be included in a request to a given URL. + % + % CookieJar Properties: + % path - Directory where to save cookies.mat + % + % CookieJar Methods: + % setCookies - Adds cookies to the jar. + % getCookies - Return an array of cookies which match the given URL + % + % persist - Forces cookie jar to be saved to disk + % load - Forces cookie jar to be loaded from disk + % purge - Empties the entire cookie jar and deletes cookies from + % disk + + % Copyright 2022 The MathWorks, Inc. + + properties(Access=private) + cookiejar + end + properties + path + end + + methods + + function obj = CookieJar(path) + if nargin == 0 + path = prefdir; + end + % CookieJar Constructor + obj.path = path; + obj.load; + end + + function setCookies(obj, cookies) + % SETCOOKIES Adds cookies to the jar. Expects an array of + % matlab.net.http.CookieInfo as input. This can for example be + % obtained using matlab.net.http.CookieInfo.collectFromLog or + % by manually instantiating matlab.net.http.CookieInfo. + % + % See Also: matlab.net.http.CookieInfo.collectFromLog + + % For each cookie + for cookie = cookies + % Form a key based on cookie info + key = sprintf('%s|%s|%d|%d|%d|%s',cookie.Domain,cookie.Path,cookie.Secure,cookie.HttpOnly,cookie.HostOnly,cookie.Cookie.Name); + + % Use they to automatically either add or update + obj.cookiejar(key) = cookie; + end + obj.persist; + end + + function cookies = getCookies(obj, uri) + % GETCOOKIES returns an array of matlab.net.http.Cookie for the + % given URI which must be provided as first input. + if isempty(obj.cookiejar) + cookies = []; + else + % Start a new Map + c = containers.Map; + % Sort cookies such that broadest applicable cookies are + % evaluated first. They may then get overwritten with + % a more specific cookie later. First sort by whether + % Cookie is Host specific and then by path length + cs = cellfun(@(x)[x.HostOnly,strlength(x.Path)],obj.cookiejar.values,'UniformOutput',false); + [~,ii] = sortrows(vertcat(cs{:})); + % Go through the cookies in this sorted order + allCookies = obj.cookiejar.values; + for i = ii' + % Get current cookie + cc = allCookies{i}; + + if (~endsWith(uri.Host, cc.Domain, "IgnoreCase", true)) || ... % Do NOT add if host does not match + (~startsWith(uri.EncodedPath,cc.Path, "IgnoreCase", true)) || ... % Do NOT add if path does not match + (cc.Secure && uri.Scheme ~= "https") || ... % Do NOT add if secure cookie but not HTTPS + (cc.ExpirationTime < datetime('now','timezone','local')) % Do NOT add if cookie expired + continue + end + + % If everything matches, include cookie, this may add a + % new cookie to the map or overwrite a less specific one + c(cc.Cookie.Name) = cc.Cookie; + end + + % Then return all matching cookies + cookies = c.values; + cookies = [cookies{:}]; + end + end + + function persist(obj, path) + % PERSIST forces cookie jar to be saved to disk. This method is + % also called automatically by setCookies if new cookies are + % added. Can be called with a alternative directory as input to + % force saving cookies.mat to this alternative location. The + % CookieJar instance is then also reconfigured to continue + % working with this new location. + if nargin == 2 + obj.path = path; + end + cookies = obj.cookiejar; + save(fullfile(obj.path,'cookies.mat'),'cookies'); + end + + function load(obj,path) + % LOAD forces cookie jar to be loaded from disk. This method is + % also called automatically by the constructor. Can be called + % with a alternative directory as input to force saving + % cookies.mat to this alternative location. The CookieJar + % instance is then also reconfigured to continue working with + % this new location. + if nargin == 2 + obj.path = path; + end + if isfile(fullfile(obj.path,'cookies.mat')) + c = load(fullfile(obj.path,'cookies.mat'),'cookies'); + obj.cookiejar = c.cookies; + else + obj.cookiejar = containers.Map(); + end + end + + function purge(obj) + % PURGE completely empties the cookie jar and also deletes + % cookies.mat from disk. + obj.cookiejar = containers.Map; + if isfile(fullfile(obj.path,'cookies.mat')) + delete(fullfile(obj.path,'cookies.mat')) + end + end + + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+control/JSONEnum.m b/Software/MATLAB/app/system/+adx/+control/JSONEnum.m new file mode 100644 index 0000000..ee281a7 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/JSONEnum.m @@ -0,0 +1,47 @@ +classdef (Abstract) JSONEnum + % JSONEnum Base class for enumerations when working with adx.control.JSONMapper + % When adding enumeration properties to adx.control.JSONMapper objects, the custom + % enumeration classes must inherit from this JSONEnum base class. And + % the custom enumeration class must declare string values for each enum + % element, these represent the JSON representation of the enumeration + % values; this is required since not all JSON values are guaranteed to + % be valid MATLAB variable names whereas the actual MATLAB enumeration + % values must be. + % + % Example: + % + % classdef myEnum < JSONEnum + % enumeration + % VAL1 ("VAL.1") + % VAL2 ("VAL.2") + % end + % end + % + % Even if JSON values are valid MATLAB variables, the string value must + % be provided, e.g.: + % + % classdef myEnum < JSONEnum + % enumeration + % VAL1 ("VAL1") + % VAL2 ("VAL2") + % end + % end + + % Copyright 2022 The MathWorks, Inc. + + properties (SetAccess = immutable) + JSONValue + end + methods + function obj = JSONEnum(value) + obj.JSONValue = value; + end + function v = fromJSON(obj,json) + vals = enumeration(obj); + v = vals(strcmp([vals.JSONValue],char(json))); + if isempty(v) + error("JSONMapper:JSONEnum:invalid",'String "%s" is not a valid enumeration value for enumeration type "%s"',json,class(obj)); + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+control/JSONMapper.m b/Software/MATLAB/app/system/+adx/+control/JSONMapper.m new file mode 100644 index 0000000..705a6ff --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/JSONMapper.m @@ -0,0 +1,801 @@ +classdef (Abstract) JSONMapper < handle + % adx.control.JSONMapper base class - adds JSON serialization and deserialization. + % Derive MATLAB classes from this class to allow them to be + % deserialized from JSON mapping the JSON fields to the class + % properties. To allow proper nesting of object, derived objects must + % call the adx.control.JSONMapper constructor from their constructor: + % + % function obj = myClass(s,inputs) + % arguments + % s {adx.control.JSONMapper.ConstructorArgument} = [] + % inputs.?myClass + % end + % obj@adx.control.JSONMapper(s,inputs); + % end + % + % Make sure to update the class name (myClass in the example) in both + % the function name as well as in the arguments block. + % + % During serialization or deserialization the MATLAB object definition + % is leading. JSON data is converted to MATLAB data types based on the + % type declaration in MATLAB. Therefore all properties of the MATLAB + % class *must* have a type declaration. Also, fields are only + % deserialized if they actually exist on the MATLAB class, any + % additional fields in the JSON input are ignored. + % + % Supported property datatypes: double, float, uint8, int8, uint16, + % int16, uint32, int32, uint64, int64, logical, enum, string, char, + % datetime (must be annotated), containers.Map, classes derived from + % adx.control.JSONMapper. + % + % Annotations can be added to properties as "validation functions". + % + % adx.control.JSONMapper Methods: + % + % fieldName - allows property to be mapped to a JSON field with + % different name + % JSONArray - specifies field is a JSON array + % epochDatetime - for datetime properties specifies in JSON the date + % time is encoded as epoch. Must be the first + % attribute if used + % stringDatetime - for datetime properties specifies in JSON the date + % time is encoded as string with a particular format. + % Must be the first attribute if used. + % doNotParse - indicate that a field's JSON should not be parsed. + % if JSONArray is also applied the field will be + % parsed at the array level. + + + % Copyright 2022-2024 The MathWorks, Inc. + + properties (Access=private) + MATLABProperties adx.control.JSONPropertyInfo + end + + properties (Constant, Access=private) + MATLABGSON = com.google.gson.GsonBuilder().serializeSpecialFloatingPointValues().create(); + end + + methods (Static) + function doNotParse(~) + + end + + function fn = fieldName(~,fn) + % FIELDNAME adx.control.JSONMapper Annotation + % This can be added to properties if the MATLAB property name + % and JSON field name differ. For example, when the JSON field + % name is not a valid MATLAB identifier. + % + % Example: + % + % properties + % some_field {adx.control.JSONMapper.fieldName(some_field,"some.field")} + % end + % + end + + function JSONArray(~) + % JSONARRAY adx.control.JSONMapper Annotation + % Specified that the JSON field is an array. + % + % Ensures that when serializing a MATLAB scalar it is in fact + % encoded as a JSON array rather than a scalar if the property + % has been annotated with this option. + end + + function out = epochDatetime(in,options) + % EPOCHDATETIME adx.control.JSONMapper Annotation + % When working with datetime fields either epochDatetime or + % stringDatetime annotation is required to specify how the + % datetime is encoded in JSON. This must be the first + % annotation. + % + % When called without inputs POSIX time/UNIX timestamp is + % assumed. + % + % Optional Name-Value pairs TimeZone, Epoch and TicksPerSecond + % can be provided (their meaning is the same as when working + % with datetime(d,'ConvertFrom','epochtime', OPTIONS). + % + % Example: + % + % properties + % % start_date is a UNIX timestamp + % start_date {adx.control.JSONMapper.epochDatetime} + % % end_date is UNIX timestamp in milliseconds + % end_date {adx.control.JSONMapper.epochDatetime(end_date,'TicksPerSecond',1000)} + % end + arguments + in + options.TimeZone = '' + options.Epoch = '1970-01-01' + options.TicksPerSecond = 1; + end + + if isa(in,'java.lang.String') + in = string(in); + end + + % Depending on the input type we are either converting from + % JSON to datetime or the other way around + + if isstring(in) % From JSON to datetime + % Value will have been passed as a string such that it can + % be parsed to int64 without loss of precision. Perform + % this conversion + in = sscanf(in,'%ld'); + % Convert to MATLAB datetime + + % propertyClassCoercionException will mask the error in + % datetime conversion if this is called as part of fromJSON + % deserializtion of an object hierarchy. Therefore + % explicitly FPRINTF to stderr any errors here + try + out = datetime(in,'ConvertFrom','epochtime',... + 'TimeZone',options.TimeZone,... + 'Epoch',options.Epoch,'TicksPerSecond',options.TicksPerSecond); + catch ME + fprintf(2,'Error in adx.control.JSONMapper: %s\n\n',ME.message); + end + elseif isdatetime(in) % From datetime to (JSON) int64 + in.TimeZone = options.TimeZone; + out = convertTo(in,'epochTime', ... + 'Epoch',options.Epoch,'TicksPerSecond',options.TicksPerSecond); + end + end + + function out = stringDatetime(in,format,options) + % STRINGDATETIME adx.control.JSONMapper Annotation + % When working with datetime fields either epochDatetime or + % stringDatetime annotation is required to specify how the + % datetime is encoded in JSON. This must be the first + % annotation. + % + % stringDatetime requires the string format as input. + % + % Optional Name-Value pair TimeZone can be provided. + % + % Example: + % + % properties + % start_date {adx.control.JSONMapper.stringDatetime(start_date,'yyyy-MM-dd''T''HH:mm:ss')} + % end + arguments + in + format string + options.TimeZone = '' + end + if isa(in,'java.lang.String') + in = string(in); + end + + % Depending on the input type we are either converting from + % JSON to datetime or the other way around + + if isstring(in) || ischar(in) % From JSON to datetime + % propertyClassCoercionException will mask the error in + % datetime conversion if this is called as part of fromJSON + % deserializtion of an object hierarchy. Therefore + % explicitly FPRINTF to stderr any errors here. + + % Try to parse twice, once with fractional seconds, once + % without + try + out = datetime(in,'InputFormat', format,'TimeZone',options.TimeZone); + catch + try + out = datetime(in,'InputFormat', strrep(format,'.SSS',''),'TimeZone',options.TimeZone); + catch ME + fprintf(2,'Error in adx.control.JSONMapper: %s\n\n',ME.message); + end + end + elseif isdatetime(in) % From datetime to (JSON) string + in.Format = format; + in.TimeZone = options.TimeZone; + out = string(in); + end + end + + function ConstructorArgument(arg) + % CONSTRUCTORARGUMENT to be used in derived constructors to + % allow string or char arrays as input and allows the + % constructor to be used when working with nested adx.control.JSONMapper + % derived classes. + tf = isempty(arg) || isa(arg,'com.google.gson.JsonElement') || isstring(arg) || ischar(arg); + if (~tf) + error('JSONMapper:InvalidInput',[... + 'Input must be either a string or char array which is ' ... + 'a valid JSON string, or the Name part of a Name-Value ' ... + 'pair where Name must then be the name of one of the ' ... + 'class properties.']); + end + end + end + + methods + + function obj = JSONMapper(s,inputs) + % adx.control.JSONMapper Constructor. Call this from + % derived classes constructors: + % + % function obj = myClass(s,inputs) + % arguments + % s {adx.control.JSONMapper.ConstructorArgument} = [] + % inputs.?myClass + % end + % obj@adx.control.JSONMapper(s,inputs); + % end + % + % Make sure to update the class name (myClass in the example) + % in both the function name as well as in the arguments block. + + % Ensure that MATLABProperties is initialized + obj.MATLABProperties = adx.control.JSONPropertyInfo.getPropertyInfo(obj); + + % For backwards compatibility with derived classes with the old + % constructor do check nargin, for derived classes with the new + % constructor this should not be necessary + if nargin > 0 + % If there is an input + if ~isempty(s) + % And it is a JsonElement, string or char + if (isa(s,'com.google.gson.JsonElement') || isstring(s) || ischar(s)) + % Use the helper method to copy values from this + % JsonElement to properties of the object + obj = obj.fromJSON(s); + else + error('JSONMapper:InvalidInput','%s constructor was called with an invalid input.',class(obj)); + end + end + end + + % fromInputs behavior + if nargin > 1 + for p = string(fieldnames(inputs))' + obj.(p) = inputs.(p); + end + end + end + + function obj = fromJSON(obj, json) + useParallel = false; + try + % FROMJSON deserializes object from JSON format. + % Can deserialize whole hierarchies of objects if all classes + % in the hierarchy derive from adx.control.JSONMapper. + % + % Example: + % obj = myClass; + % obj.fromJSON('{"answer": 42}') + + % If input is char/string, parse it as json, when working with + % nested objects, this can also be a com.google.gson.JsonObject + % or JsonArray. + + % If data came in as binary raw bytes, do try to interpret as + % UTF-8 string + if isinteger(json) + json = native2unicode(json,"UTF-8"); + end + + % If the input is a scalar string/char parse it + if isstring(json) + if isStringScalar(json) + json = com.google.gson.JsonParser().parse(json); + else + error('JSONMapper:fromJSON', "String input must be scalar"); + end + else + if ischar(json) + json = com.google.gson.JsonParser().parse(json); + end + end + + % Ensure input is always an array + if (~json.isJsonArray()) + j = com.google.gson.JsonArray(); + j.add(json); + json = j; + end + + % For all elements in the JSON array + N = json.size(); + + % For an empty array + if N == 0 + obj = obj.empty; + end + + for arrayIndex=1:N + % Get the current JSON element from the array + curElement = json.get(arrayIndex-1); + + % For each property in the MATLAB class + for curProp = obj(1).MATLABProperties + if curProp.doNotParse + % If not parsing get the value(s) as a string or an array of strings + % If the isArray property is set then split the JSON array into a + % string array but the strings are not parsed + if ~ismethod(curElement, "has") + % e.g. JSON literal: ["outages","unittestdb",null,null,1,45599.0] + if curElement.isJsonNull + obj(arrayIndex).(curProp.mName) = string.empty; + else + % Strip a leading and trailing pair of + % quotes if present + obj(arrayIndex).(curProp.mName) = string(stripLeadingTrailingPair(char(curElement.toString()), '"')); + end + elseif curElement.isJsonArray || curElement.isJsonObject + if curElement.has(curProp.jName) + if curElement.isJsonNull + % Not parsing the JSON so assigning an empty string + obj(arrayIndex).(curProp.mName) = string.empty; + else + curVal = curElement.get(curProp.jName); + if curVal.isJsonArray + if curProp.isArray + if ismethod(curElement, "isEmpty") && curVal.isEmpty + obj(arrayIndex).(curProp.mName) = string.empty; + else + % Can't tell if the array entries are primitive strings + % which will have quotes or not, don't want to iterate + % and call is isJsonPrimitive so to allow getAsString() + % so call toString on all an clean up quotes afterwards + % in MATLAB + tIt = org.apache.commons.collections.IteratorUtils.transformedIterator(curVal.iterator, org.apache.commons.collections.functors.InvokerTransformer.getInstance('toString')); + cArray = cell(org.apache.commons.collections.IteratorUtils.toArray(tIt)); + verbose = true; + if useParallel && gt(numel(cArray), 1000) && startPool(verbose) + obj(arrayIndex).(curProp.mName) = parStripLeadingTrailingPair(cArray, '"'); %#ok % See experimental useParallel flag above + else + cArray = arrayfun(@(A) stripLeadingTrailingPair(A, '"'), cArray); + obj(arrayIndex).(curProp.mName) = convertCharsToStrings(cArray); + % c. 10x slower, due to Java overhead + % nElements = curVal.size(); + % obj(arrayIndex).(curProp.mName) = strings(nElements,1); + % for m = 1:nElements + % obj(arrayIndex).(curProp.mName)(m) = curVal.get(m-1).toString(); + % end + end + end + else + % Strip quotes gson returns on toString + obj(arrayIndex).(curProp.mName) = string(stripLeadingTrailingPair(char(curVal.toString()), '"')); + end + elseif curVal.isJsonNull + obj(arrayIndex).(curProp.mName) = string.empty; + else + % Strip quotes gson returns on toString + obj(arrayIndex).(curProp.mName) = string(stripLeadingTrailingPair(char(curVal.toString()), '"')); + end + end + end + else + error('JSONMapper:fromJSON', "Expected to skip parsing on gson JsonArrays only found class: %s", class(curElement)); + end + else + % Parse relative to the MATLAB object + + % Should only be JsonArray at this point + if curElement.isJsonArray || curElement.isJsonObject + if ~ismethod(curElement, "has") + warning('JSONMapper:fromJSON', "Unexpected JSON element without has method, skipping: %s", curElement.toString()); + else + % Check whether property is also present in JSON + if curElement.has(curProp.jName) + % If null assign an empty of the appropriate type + if curElement.isJsonNull + obj(arrayIndex).(curProp.mName) = eval([curProp.dataType.Name '.empty']); + else + % If the property is present in JSON, get this JSONObject + curVal = curElement.get(curProp.jName); + % Now, how to convert this to a MATLAB type is + % governed by the data type specified on the MATLAB + % end. This is especially important for (u)int64 + % such that we can avoid loss of precision as well + % as datetime such that we can correctly convert it. + switch curProp.dataType + case {?string,?char} + obj(arrayIndex).(curProp.mName) = getScalarOrArray(curVal,'string'); + case {?single,?double} + obj(arrayIndex).(curProp.mName) = getScalarOrArray(curVal,'double'); + case {?datetime} + val = arrayfun(curProp.dtConversionFunction,getScalarOrArray(curVal,'string')); + obj(arrayIndex).(curProp.mName) = val; + case {?duration} + val = arrayfun(curProp.durConversionFunction,getScalarOrArray(curVal,'string')); + obj(arrayIndex).(curProp.mName) = val; + case {?int8,?uint8,?int16,?uint16,?int32,?uint32} + obj(arrayIndex).(curProp.mName) = getScalarOrArray(curVal,'long'); + case {?int64} + obj(arrayIndex).(curProp.mName) = arrayfun(@(x)sscanf(char(x),'%ld'), getScalarOrArray(curVal,'string')); + case {?uint64} + obj(arrayIndex).(curProp.mName) = arrayfun(@(x)sscanf(char(x),'%lu'), getScalarOrArray(curVal,'string')); + case {?logical} + obj(arrayIndex).(curProp.mName) = getScalarOrArray(curVal,'bool'); + case {?containers.Map} + map = containers.Map('KeyType','char','ValueType','char'); + it = curVal.entrySet.iterator; + while it.hasNext + kv = it.next; + map(char(kv.getKey)) = char(kv.getValue.getAsString()); + end + obj(arrayIndex).(curProp.mName) = map; + case {?adx.control.JSONMapperMap} + map = adx.control.JSONMapperMap; + it = curVal.entrySet.iterator; + while it.hasNext + kv = it.next; + map(char(kv.getKey)) = char(kv.getValue.getAsString()); + end + obj(arrayIndex).(curProp.mName) = map; + case {?meta.class} % freeform object, decode as struct + obj(arrayIndex).(curProp.mName) = jsondecode(char(curVal.toString())); + otherwise + if isenum(obj(1).(curProp.mName)) + obj(arrayIndex).(curProp.mName) = arrayfun(@(x)obj(arrayIndex).(curProp.mName).fromJSON(x),getScalarOrArray(curVal,'string')); + else + obj(arrayIndex).(curProp.mName) = curVal; + end + end + end + else + % If the field is not present in the JSON data and + % not null, explicitly set the object property to + % empty of the correct class, this allows the same + % method to also be used for refreshing existing + % objects and not only for filling in properties in + % new objects + obj(arrayIndex).(curProp.mName) = eval([curProp.dataType.Name '.empty']); + end + end + else + error('JSONMapper:fromJSON', "Expected to parse gson JsonArrays only found class: %s", class(curElement)); + end + end + end + end + catch ME + fprintf(2,'%s\n',ME.getReport); + rethrow(ME) + end + end + + + function json = jsonencode(obj,raw) + % JSONENCODE serializes object as JSON + % Can serialize whole hierarchies of objects if all classes + % in the hierarchy derive from adx.control.JSONMapper. + % + % The function should only ever be called with one input: the + % object to be serialized. The second input is only meant to be + % used internally when jsonencode is called recursively. + % + % Example: + % + % json = jsonencode(obj); + + % External call + if nargin==1 + raw = false; + end + + % Determine whether input is an array + isArray = length(obj) > 1; + if isArray + arr = com.google.gson.JsonArray; + end + % Start a new JsonObject for the current array element + jObject = com.google.gson.JsonObject; + % For all elements in the array + for arrayIndex=1:length(obj) + + % For all properties on the MATLAB class + for currProp = obj(arrayIndex).MATLABProperties + % Only include if the property actually has been set at + % all on MATLAB end + if isempty(obj(arrayIndex).(currProp.mName)) + continue + end + % Again the MATLAB datatype is leading to determine how + % data gets serialized. + switch currProp.dataType + case {?datetime} + dt = obj(arrayIndex).(currProp.mName); + val = feval(currProp.dtConversionFunction,dt); + jObject.add(currProp.jName,getJSONScalarOrArray(val,currProp.isArray)); + case {?duration} + dur = obj(arrayIndex).(currProp.mName); + val = feval(currProp.durConversionFunction,dur); + jObject.add(currProp.jName,getJSONScalarOrArray(val,currProp.isArray)); + case {?single,?double,... + ?int8,?uint8,?int16,?uint16,?int32,?uint32,... + ?string,?char,... + ?int64,... + ?logical} + jObject.add(currProp.jName,getJSONScalarOrArray(obj(arrayIndex).(currProp.mName),currProp.isArray)); + case {?uint64} + v = obj(arrayIndex).(currProp.mName); + if length(v) == 1 && ~currProp.isArray %#ok % Warning in >=24a + val = java.math.BigInteger(sprintf('%lu',v)); + else + val = javaArray('java.math.BigInteger',length(v)); + for i=1:length(v) + val(i) = java.math.BigInteger(sprintf('%lu',v(i))); + end + end + jObject.add(currProp.jName,adx.control.JSONMapper.MATLABGSON.toJsonTree(val)); + case {?containers.Map} + vals = obj(arrayIndex).(currProp.mName).values; + keys = obj(arrayIndex).(currProp.mName).keys; + m = com.google.gson.JsonObject; + for i=1:length(vals) + m.add(keys{i},adx.control.JSONMapper.MATLABGSON.toJsonTree(vals{i})); + end + jObject.add(currProp.jName,m); + case {?meta.class, ?adx.control.JSONMapperMap} % free form + % Use built-in jsonencode to get a JSON string, + % parse back using JsonParser and add to the tree + v = obj(arrayIndex).(currProp.mName); + jObject.add(currProp.jName,com.google.gson.JsonParser().parse(jsonencode(v))); + otherwise + if isenum(obj(arrayIndex).(currProp.mName)) + jObject.add(currProp.jName,getJSONScalarOrArray([obj(arrayIndex).(currProp.mName).JSONValue],currProp.isArray)); + else + jObject.add(currProp.jName,getJSONScalarOrArray(jsonencode(obj(arrayIndex).(currProp.mName),true),currProp.isArray)); + end + end + end + % If input was an array, add object to the array + % a new one + if isArray + arr.add(jObject) + jObject = com.google.gson.JsonObject; + end + end + % Full JSON has been built. + + % Now return the output as string if raw == false or as + % JsonElement when raw == true + if isArray + if raw + json = arr; + else + json = char(adx.control.JSONMapper.MATLABGSON.toJson(arr)); + end + else + if raw + json = jObject; + else + json = char(adx.control.JSONMapper.MATLABGSON.toJson(jObject)); + end + end + end + + function json = getPayload(obj,requiredProperties,optionalProperties) + % GETPAYLOAD JSON encodes the object taking into account + % required and optional properties. + % + % Verifies that required properties have indeed been set. + % Includes optional properties in the output. All other + % properties are not included in the output. + + + % Actually first simply encode the whole thing + json = jsonencode(obj,true); + + % And then go through all properties, checking the required are + % indeed there and ignored properties are actively removed + % again + for prop = obj.MATLABProperties + if ~isempty(requiredProperties) && ismember(prop.mName,requiredProperties) + if ~json.has(prop.jName) + if prop.isArray + % In case of a required array set to an empty + % array + json.add(prop.jName,com.google.gson.JsonArray) + else + % If required but not set throw an error + error('JSONMAPPER:ERROR','Property "%s" must be set.',prop.mName) + end + else + % If required and set, leave it + + end + elseif ~isempty(optionalProperties) && ismember(prop.mName,optionalProperties) + if ~isempty(obj.(prop.mName)) + % If optional and set, keep + + end + else + if ~isempty(obj.(prop.mName)) && ~(isempty(optionalProperties) && isempty(requiredProperties)) + % If not used but set, warn and remove + json.remove(prop.jName); + warning('JSONMAPPER:IGNOREDPROPERTYSET','Property "%s" has explicitly been set but will be ignored.',prop.mName) + else + % Property was set and both requiredProperties and + % optionalProperties were entirely empty. This may + % happen in oneOf, anyOf, allOf cases. In that case + % assume the end-user knows what they are doing and + % just keep the property without errors or warnings + end + end + end + % JSON encode the object + json = char(json.toString()); + end + end +end + +function out = getJSONScalarOrArray(val,forceArray) + % GETJSONSCALARORARRAY helper function to ensure values are serialized + % as an array if required. + if forceArray && ~isa(val,'com.google.gson.JsonArray') && length(val) == 1 %#ok % Warning in >=24a + out = com.google.gson.JsonArray(); + out.add(adx.control.JSONMapper.MATLABGSON.toJsonTree(val)); + else + out = adx.control.JSONMapper.MATLABGSON.toJsonTree(val); + end +end + +function val = getScalarOrArray(curVal,type) + % GETSCALARORARRAY helper function which can return MATLAB datatypes + % from an JsonArray as well as JsonObject. + + if curVal.isJsonArray() + switch type + case 'double' + t = java.lang.Class.forName('[D'); + case 'long' + t = java.lang.Class.forName('[J'); + case 'string' + t = java.lang.Class.forName('[Ljava.lang.String;'); + case 'bool' + t = java.lang.Class.forName('[Z'); + end + else + switch type + case 'double' + t = java.lang.Double.TYPE; + case 'long' + t = java.lang.Long.TYPE; + case 'string' + t = java.lang.Class.forName('java.lang.String'); + case 'bool' + t = java.lang.Boolean.TYPE; + end + end + val = adx.control.JSONMapper.MATLABGSON.fromJson(curVal,t); + if type == "string" + val = string(val); + end +end + +function result = stripLeadingTrailingPair(str, stripCharacter) + % stripLeadingTrailingPair Remove a leading an trailing pair of stripCharacter + % If only on stripCharacter is found it is not removed. + % stripCharacter must be a single character only. + % str and stripCharacter must be a scalar strings or character vectors. + % If str is a scalar string a scalar string is returned. + % If str is a character vector a character vector is returned. + + if iscell(str) + if length(str) > 1 && height(str) > 1 + error("JSONMAPPER:STRIPLEADINGTRAILINGPAIR", "Expected one array dimension to be 0 or 1"); + end + result = cell(size(str)); + for n = 1:numel(str) + result{n} = stripLeadingTrailingPair(str{n}, stripCharacter); + end + else + if strlength(stripCharacter) ~= 1 + error("JSONMAPPER:STRIPLEADINGTRAILINGPAIR", "Only a single leading and trailing character can be stripped"); + end + + if ~isStringScalar(str) && ~ischar(str) + error("JSONMAPPER:STRIPLEADINGTRAILINGPAIR", "Input text must be a scalar string or character vector"); + end + + sl = strlength(str); + + if sl < 2 + result = str; + elseif sl == 2 + if startsWith(str, stripCharacter) && endsWith(str, stripCharacter) + if ischar(str) + result = ''; + else + result = ""; + end + else + result = str; + end + else + if startsWith(str, stripCharacter) && endsWith(str, stripCharacter) + result = extractBetween(str, 2, sl-1); + else + result = str; + end + end + end +end + +function resultStr = parStripLeadingTrailingPair(strCell, stripCharacter) + + fprintf("Processing: %d fields in parallel in parStripLeadingTrailingPair\n", numel(strCell)); + + resultStr = strings(size(strCell)); + parfor n = 1:numel(strCell) + + str = strCell{n}; + + if strlength(stripCharacter) ~= 1 + error("JSONMAPPER:STRIPLEADINGTRAILINGPAIR", "Only a single leading and trailing character can be stripped"); + end + + if ~isStringScalar(str) && ~ischar(str) + error("JSONMAPPER:STRIPLEADINGTRAILINGPAIR", "Input text must be a scalar string or character vector"); + end + + sl = strlength(str); + + if sl < 2 + result = str; + elseif sl == 2 + if startsWith(str, stripCharacter) && endsWith(str, stripCharacter) + if ischar(str) + result = ''; + else + result = ""; + end + else + result = str; + end + else + if startsWith(str, stripCharacter) && endsWith(str, stripCharacter) + result = extractBetween(str, 2, sl-1); + else + result = str; + end + end + resultStr(n) = string(result); + end +end + + +function doParfor = startPool(verbose) + if isempty(ver('parallel')) + if verbose + fprintf("Parallel Computing Toolbox is not available\n"); + end + doParfor = false; + return; + end + + pool = gcp('nocreate'); + if isempty(pool) + % Note the default decoder requires a process based pool as opposed to "Threads" + % because of its use of Java, which might otherwise be preferable + pool = parpool('Threads'); + % pool = parpool('Processes'); + end + + if isa(pool, 'parallel.ThreadPool') + doParfor = true; + if verbose + fprintf("Found a thread based pool, number of workers in the pool: %d\n", pool.NumWorkers); + end + elseif isprop(pool,'Cluster') && isprop(pool.Cluster,'Profile') && strcmp(pool.Cluster.Profile, 'Processes') + doParfor = true; + if verbose + fprintf("Found a process based pool, number of workers in the pool: %d\n", pool.NumWorkers); + end + else + % Overhead of a remote cluster may not be justified + doParfor = false; + if verbose + fprintf("Found a parpool which is not process or thread based, rows will be processed serially.\n"); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+control/JSONMapperMap.m b/Software/MATLAB/app/system/+adx/+control/JSONMapperMap.m new file mode 100644 index 0000000..58d5e8c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/JSONMapperMap.m @@ -0,0 +1,68 @@ +classdef JSONMapperMap < handle + % JSONMAPPERMAP Alternative to containers.Map for free-form key-value + % pairs. The advantage of JSONMAPPERMAP over containers.Map is that + % instances are not shared when used as a class property. + + % Copyright 2022 The MathWorks, Inc. + + properties (Access=private) + map containers.Map + end + + methods + function obj = JSONMapperMap(varargin) + % JSONMAPPERMAP Constructor. Can be called with key value pairs + % as input to initialize the map with those keys and values. + + % Create a new containers.Map internally in the constructor to + % avoid shared instances of the inner map + obj.map = containers.Map; + + if nargin > 0 + for i = 1:2:length(varargin) + obj.map(varargin{i}) = varargin{i+1}; + end + end + + end + + function B = subsref(obj,S) + % SUBSREF retrieve a key value from the map. + + % Simply call the same subsref operation on the inner + % containers.Map + B = subsref(obj.map,S); + end + function obj = subsasgn(obj,S,B) + % SUBSASGN Assign or update a key-value pair in the map. + + % If used as a class property obj itself may in fact be an + % empty 0x0, in that case first create the instance + if isempty(obj) + obj = adx.control.JSONMapperMap; + end + % Simply call the same subsasgn on the inner containers.Map + obj.map = subsasgn(obj.map,S,B); + end + + function out = jsonencode(obj,varargin) + % JSONENCODE JSON encodes the map. + + % Call jsonencode on the inner containers.Map + out = jsonencode(obj.map,varargin{:}); + end + + function disp(obj) + % DISP Displays keys and corresponding values in the map. + if isempty(obj) + disp 'Empty adx.control.JSONMapperMap' + return + end + fprintf('adx.control.JSONMapperMap with the following key-value pairs:\n\n'); + for k = obj.map.keys + fprintf('\t%10s : %s\n',k{1},obj.map(k{1})); + end + end + end +end + diff --git a/Software/MATLAB/app/system/+adx/+control/JSONPropertyInfo.m b/Software/MATLAB/app/system/+adx/+control/JSONPropertyInfo.m new file mode 100644 index 0000000..273a138 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+control/JSONPropertyInfo.m @@ -0,0 +1,85 @@ +classdef JSONPropertyInfo < handle + % JSONPROPERTYINFO class used by adx.control.JSONMapper internally + + % Copyright 2022-2024 The MathWorks, Inc. + + properties + mName string + jName string + dataType meta.class + isArray logical + doNotParse logical + dtConversionFunction function_handle + durConversionFunction function_handle + end + + + methods (Access=private) + end + + methods (Static) + function props = getPropertyInfo(obj) + % For all public properties + ps = properties(obj); + N = length(ps); + props = adx.control.JSONPropertyInfo.empty(N,0); + for i = 1:N + pm = findprop(obj,ps{i}); + % Set basic properties like the MATLAB name and class + props(i).mName = pm.Name; + if ~isempty(pm.Validation) + props(i).dataType = pm.Validation.Class; + else + error("Property valuation class not found for: %s, properties must have a type", pm.Name); + end + % If class was not set (to allow freeform object properties) + % still set a specific dataType to allow fromJSON to parse this + % into a struct using standard jsondecode. + if isempty(props(i).dataType) + % meta-ception + props(i).dataType = ?meta.class; + end + % Check the "attributes" for further settings + attrs = cellfun(@(x)functions(x).function,pm.Validation.ValidatorFunctions,'UniformOutput',false); + if isempty(attrs) % If there are no attributes + % Names are the same + props(i).jName = pm.Name; + % It is not an array + props(i).isArray = false; + % Throw an error if data type is datetime because this + % should have had a dtConversionFunction + if props(i).dataType == ?datetime + error('JSONMapper:InvalidDatetimeProperty', ... + 'Property %s is defined as `datetime` but does not have a valid conversion function.',pm.Name); + end + if props(i).dataType == ?duration + error('JSONMapper:InvalidDurationProperty', ... + 'Property %s is defined as `duration` but does not have a valid conversion function.',pm.Name); + end + else + % If datetime, the first "attribute" must be the type definition + if props(i).dataType == ?datetime + props(i).dtConversionFunction = pm.Validation.ValidatorFunctions{1}; + end + % If datetime, the first "attribute" must be the type definition + if props(i).dataType == ?duration + props(i).durConversionFunction = pm.Validation.ValidatorFunctions{1}; + end + % Check for JSONArray attribute + props(i).isArray = any(strcmp(attrs,'adx.control.JSONMapper.JSONArray')); + % Check for fieldName attribute + fi = find(contains(attrs,"adx.control.JSONMapper.fieldName")); + if isempty(fi) + % If there is none JSON name is same as MATLAB + props(i).jName = pm.Name; + else + % If there is one, call it to obtain the JSON name + fieldNameFcn = pm.Validation.ValidatorFunctions{fi}; + props(i).jName = feval(fieldNameFcn,[]); + end + props(i).doNotParse = any(strcmp(attrs,'adx.control.JSONMapper.doNotParse')); + end + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+api/Ingest.m b/Software/MATLAB/app/system/+adx/+data/+api/Ingest.m new file mode 100644 index 0000000..66be799 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+api/Ingest.m @@ -0,0 +1,162 @@ +classdef Ingest < adx.control.BaseClient + % Ingest Class to run an ingest command + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + dataplane = true + end + + % Class methods + methods + function obj = Ingest(options) + arguments + options.configFile string {mustBeTextScalar} + options.serverUri matlab.net.URI + options.httpOptions matlab.net.http.HTTPOptions + options.preferredAuthMethod string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar}; + options.apiKey string {mustBeTextScalar}; + options.httpCredentials matlab.net.http.Credentials + options.cookies matlab.net.http.field.CookieField + options.database string {mustBeTextScalar} + options.cluster string {mustBeTextScalar} + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response] = ingestRun(obj, table, data, options) + % ingestRun + + arguments + obj adx.data.api.Ingest + table string {mustBeTextScalar} + % data should be utf8 encoded if textual + data string + options.database string {mustBeTextScalar} = obj.database + options.cluster string {mustBeTextScalar} = obj.cluster + options.streamFormat adx.data.models.StreamFormat + options.mappingName string {mustBeTextScalar} + end + + if isfield(options, 'cluster') && strlength(options.cluster) > 0 + if startsWith(options.cluster, 'https://ingest-') + cluster = options.cluster; + else + cluster = strrep(options.cluster, 'https://', 'https://ingest-'); + end + else + error("adx:data:api:ingestRun:DatabaseNotDefined","Neither cluster parameter nor a configuration file cluster field is defined"); + end + + if isfield(options, 'database') && strlength(options.database) > 0 + database = options.database; + else + error("adx:data:api:ingestRun:DatabaseNotDefined","Neither database parameter nor a configuration file database field is defined"); + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; %#ok + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("adx:data:api:Ingest:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","ingestRun"); + end + + % No body input, so no need to check its content type + + % Azure recommends enabling Keep-Alive + request.Header(end+1) = matlab.net.http.HeaderField('Connection','Keep-Alive'); + + % No header parameters + % TODO Review headers https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/streaming-ingest + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + % uri = matlab.net.URI("https://help.kusto.windows.net"); + uri = matlab.net.URI(cluster); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/v1/rest/ingest/" + string(database) + "/" + string(table); + + % No path parameters + + % Set query parameters + if isfield(options, 'streamFormat') + % See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats + uri.Query(end+1) = matlab.net.QueryParameter("streamFormat", string(options.streamFormat)); + if options.streamFormat == adx.data.models.StreamFormat.JSON || ... + options.streamFormat == adx.data.models.StreamFormat.MultiJSON || ... + options.streamFormat == adx.data.models.StreamFormat.Avro + if ~(strlength(options.mappingName) > 0) + % Required if streamFormat is one of JSON, MultiJSON, or Avro + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/mappings + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/create-ingestion-mapping-command + error("adx:data:api:Ingest", "mappingName is required if streamFormat is one of JSON, MultiJSON, or Avro"); + end + end + end + + % Sometimes optional add it if present + if isfield(options, 'mappingName') + uri.Query(end+1) = matlab.net.QueryParameter("mappingName", options.mappingName); + end + + request.Body(1).Payload = data; + + % No JSON body parameters + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("ingestRun", request, httpOptions, uri); + + % Perform the request + [response, ~, history] = send(request, uri, httpOptions); + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("ingestRun", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + %result = adx.data.models.QueryV2ResponseRaw().fromJSON(response.Body.Data); + result = response.Body.Data; + + otherwise % Default output as specified in spec + % see https://learn.microsoft.com/en-us/azure/data-explorer/error-codes + result = adx.control.models.ErrorResponse(response.Body.Data); + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+api/Management.m b/Software/MATLAB/app/system/+adx/+data/+api/Management.m new file mode 100644 index 0000000..e85b609 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+api/Management.m @@ -0,0 +1,159 @@ +classdef Management < adx.control.BaseClient + % Management Class to run a management command + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + dataplane = true + end + + + % Class methods + methods + function obj = Management(options) + arguments + options.configFile string {mustBeTextScalar} + options.serverUri matlab.net.URI + options.httpOptions matlab.net.http.HTTPOptions + options.preferredAuthMethod string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar}; + options.apiKey string {mustBeTextScalar}; + options.httpCredentials matlab.net.http.Credentials + options.cookies matlab.net.http.field.CookieField + options.scopes string {mustBeTextScalar} + options.cluster string {mustBeTextScalar} + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response, requestId] = managementRun(obj, ManagementRequest, options) + % managementRun + + arguments + obj adx.data.api.Management + ManagementRequest adx.data.models.ManagementRequest + options.cluster string = obj.cluster + options.verbose (1,1) logical = false + end + + if isfield(options, 'cluster') && ~isempty(options.cluster) && ... + strlength(options.cluster) > 0 && isStringScalar(options.cluster) + cluster = options.cluster; + else + cluster = obj.cluster; + end + + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; %#ok + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("adx:data:api:Management:UnsupportedMediaType","Class only supports 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","mgmtRun"); + end + + % No body input, so no need to check its content type + request.Header(end+1) = matlab.net.http.HeaderField('Content-Type','application/json'); + + requestId = string(javaMethod('randomUUID','java.util.UUID')); + %if options.verbose; fprintf("Request ID: %s\n", requestId); end + request = mathworks.internal.adx.setCustomQueryHeaders(request, id=requestId); + + % Azure recommends enabling Keep-Alive + request.Header(end+1) = matlab.net.http.HeaderField('Connection','Keep-Alive'); + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + % uri = matlab.net.URI("https://help.kusto.windows.net"); + uri = matlab.net.URI(cluster); + end + % Append the operation end-point + uri.EncodedPath = uri.EncodedPath + "/v1/rest/mgmt"; + + % No path parameters + + % Set JSON Body + requiredProperties = ["csl"]; %#ok + optionalProperties = ["db"]; %#ok % TODO properties field + request.Body(1).Payload = ManagementRequest.getPayload(requiredProperties,optionalProperties); + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + [request, httpOptions, uri] = obj.preSend("managementRun", request, httpOptions, uri); + + % Perform the request + [response, fullRequest, history] = send(request, uri, httpOptions); %#ok + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + response = obj.postSend("managementRun", response, request, uri, httpOptions); + + % Handle response + code = response.StatusCode; + switch (code) + case 200 + result = adx.data.models.QueryV1ResponseRaw(response.Body.Data); + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + end + end %methods + + + methods(Access = protected) + function groups = getPropertyGroups(obj) + if isscalar(obj) + % Don't display sensitive values + % bearerToken, apiKey, clientSecret + propList = {'serverUri',... + 'httpOptions',... + 'preferredAuthMethod',... + 'httpCredentials',... + 'apiVersion',... + 'subscriptionId',... + 'tenantId',... + 'clientId',... + 'database',... + 'cluster',... + 'scopes',... + 'cookies' + }; + groups = matlab.mixin.util.PropertyGroup(propList); + else + % Nonscalar case: call superclass method + groups = getPropertyGroups@matlab.mixin.CustomDisplay(obj); + end + end %function + end %methods + +end %class + diff --git a/Software/MATLAB/app/system/+adx/+data/+api/Query.m b/Software/MATLAB/app/system/+adx/+data/+api/Query.m new file mode 100644 index 0000000..0a63f05 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+api/Query.m @@ -0,0 +1,258 @@ +classdef Query < adx.control.BaseClient + % Query Class to run a KQL query + % + % Example: + % % Build a request object + % request = adx.data.models.QueryRequest(); + % colName = "myColumn"; + % message = "Hello World"; + % + % % Set the KQL query fields + % request.csl = sprintf('print %s="%s"', colName, message); + % % Don't set the database use the default in .json config file + % % request.db = "myDatabaseName" + % % No adx.data.models.ClientRequestProperties required + % % request.requestProperties + % + % % Create the Query object and run the request + % query = adx.data.api.Query(); + % % The default cluster to use is configured using a .json configuration file + % % Run the query: + % [code, result, response, requestId] = query.queryRun(request); %#ok + % + % if code == matlab.net.http.StatusCode.OK + % % Convert the response to Tables + % hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + % fprintf("Query (%s) result:\n", request.csl); + % disp(hwTable); + % else + % error('Error running query: %s', request.csl); + % end + + + % Copyright 2023-2024 The MathWorks, Inc. + + % Class properties + properties + dataplane = true + end + + + % Class methods + methods + function obj = Query(options) + arguments + options.configFile string {mustBeTextScalar} + options.serverUri matlab.net.URI + options.httpOptions matlab.net.http.HTTPOptions + options.preferredAuthMethod string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar}; + options.apiKey string {mustBeTextScalar}; + options.httpCredentials matlab.net.http.Credentials + options.cookies matlab.net.http.field.CookieField + options.scopes string + options.cluster string {mustBeTextScalar} + options.apiVersion string + end + % Call base constructor to override any configured settings + args = namedargs2cell(options); + obj@adx.control.BaseClient(args{:}) + end + + function [code, result, response, requestId] = queryRun(obj, queryRequest, options) + % queryRun Runs a KQL query + % + % Required argument(s) + % queryRequest: A populated adx.data.models.QueryRequest that defines the + % query, the database and potentially query properties. + % + % Optional named arguments: + % cluster: A cluster URL as a scalar string. + % + % apiVersion: URL path API version field, if not provided and the query starts + % with "." v1 is used otherwise v2 is used. + % + % skipRowsArrayDecode: Returns a adx.data.models.QueryV2ResponseUnparsedRows where + % the frames are parsed but the array of rows are not parsed + % into individual values if true. Otherwise a + % adx.data.models.QueryV2ResponseRaw is returned. + % Only applied in the case of v2 APIs. + % Default is false. + % + % skipResponseDecode: Logical flag to determine if the HTTP response should be + % be parsed at all. If true the result is returned as a + % adx.data.models.QueryV2ResponseRaw.empty or a + % adx.data.models.QueryV1ResponseRaw.empty as appropriate. + % Default is false. + % + % verbose: Logical to enable additional output. Default is false. + % + % Return values: + % code: HTTP status code, 200 (matlab.net.http.StatusCode.OK) indicates success. + % + % result: Returned data is various forms or an ErrorResponse: + % adx.control.models.ErrorResponse + % adx.data.models.QueryV2ResponseRaw + % adx.data.models.QueryV2ResponseUnparsedRows + % adx.data.models.QueryV1ResponseRaw + % + % response: The original HTTP response to the matlab.net.http.RequestMessage.send + % The response may have been optionally processed by the baseClient + % postSend method. + % + % requestId: A UUID value generated and submitted with the query to + % identify it. + + arguments + obj adx.data.api.Query + queryRequest adx.data.models.QueryRequest + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} = obj.cluster + options.apiVersion string {mustBeTextScalar, mustBeNonzeroLengthText} + options.skipRowsArrayDecode (1,1) logical = false; + options.skipResponseDecode (1,1) logical = false; + options.verbose (1,1) logical = false; + end + + if options.verbose; fprintf("Starting query\n"); end + + if isfield(options, 'cluster') && strlength(options.cluster) > 0 + cluster = options.cluster; + else + error("adx:data:api:Query:ClusterNotDefined","Neither cluster parameter nor a configuration file cluster field is defined"); + end + if options.verbose; fprintf("Cluster: %s\n", cluster); end + % Create the request object + request = matlab.net.http.RequestMessage(); + + % Verify that operation supports returning JSON + specAcceptHeaders = [... + "application/json", ... + ]; %#ok + if ismember("application/json",specAcceptHeaders) + request.Header(end+1) = matlab.net.http.field.AcceptField('application/json'); + else + error("adx:data:api:Query:UnsupportedMediaType","Class only supports 'application/json' MediaType.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","queryRun"); + end + + % Verify that operation supports JSON or FORM as input + specContentTypeHeaders = [... + "application/json", ... + ]; %#ok + if ismember("application/json",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/json'); + elseif ismember("application/x-www-form-urlencoded",specContentTypeHeaders) + request.Header(end+1) = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'); + else + error("adx:data:api:Query:executeStatement:UnsupportedMediaType","Generated OpenAPI Classes only support 'application/json' and 'application/x-www-form-urlencoded' MediaTypes.\n" + ... + "Operation '%s' does not support this. It may be possible to call this operation by first editing the generated code.","queryRun") + end + + requestId = string(javaMethod('randomUUID','java.util.UUID')); + if options.verbose; fprintf("Request ID: %s\n", requestId); end + request = mathworks.internal.adx.setCustomQueryHeaders(request, id=requestId); + + % Azure recommends enabling Keep-Alive + request.Header(end+1) = matlab.net.http.HeaderField('Connection','Keep-Alive'); + + % Configure default httpOptions + httpOptions = obj.httpOptions; + % Never convert API response + httpOptions.ConvertResponse = false; + + % Configure request verb/method + request.Method = matlab.net.http.RequestMethod('POST'); + + % Build the request URI + if ~isempty(obj.serverUri) + % If URI specified in object, use that + uri = obj.serverUri; + else + % If no server specified use base path from OpenAPI spec + % uri = matlab.net.URI("https://help.kusto.windows.net"); + uri = matlab.net.URI(cluster); + end + % Append the operation end-point + if isfield(options, "apiVersion") + apiVersion = options.apiVersion; + % Don't use the Object's apiVerson value as it will be 2022-11-11 + % or similar based on the control api baseClient + % elseif isprop(obj, "apiVersion") && strlength(obj.apiVersion) > 0 + % apiVersion = obj.apiVersion; + elseif startsWith(strip(queryRequest.csl), ".") + apiVersion = "v1"; + else + apiVersion = "v2"; + end + if options.verbose; fprintf("apiVersion: %s\n", apiVersion); end + if ~(strcmpi(apiVersion, "v2") || strcmpi(apiVersion, "v1")) + warning("adx:queryRun", "Unexpected API version: %s", apiVersion); + end + uri.EncodedPath = uri.EncodedPath + "/" +apiVersion + "/rest/query"; + + % No path parameters + + % Set query parameters + %uri.Query(end+1) = matlab.net.QueryParameter("api-version", obj.apiVersion); + + % Set JSON Body + requiredProperties = ["db", "csl"]; + optionalProperties = ["requestProperties"]; %#ok + request.Body(1).Payload = queryRequest.getPayload(requiredProperties, optionalProperties); + if options.verbose; fprintf("Database: %s\n", queryRequest.db); end + if options.verbose; fprintf("CSL: %s\n", queryRequest.csl); end + + % No form body parameters + + % Operation does not require authorization + + % Add cookies if set + request = obj.applyCookies(request, uri); + + % Call preSend + if options.verbose; fprintf("Running preSend\n"); end + [request, httpOptions, uri] = obj.preSend("queryRun", request, httpOptions, uri); + + % Perform the request + if options.verbose; fprintf("Sending request\n"); end + [response, full, history] = send(request, uri, httpOptions); %#ok + + % Handle cookies if set + obj.setCookies(history); + + % Call postSend + if options.verbose; fprintf("Running postSend\n"); end + response = obj.postSend("queryRun", response, request, uri, httpOptions); + + % Handle response + if options.verbose; fprintf("Response code: %d\n", response.StatusCode); end + code = response.StatusCode; + switch (code) + case 200 + if strcmp(apiVersion, "v2") + if options.skipResponseDecode + result = adx.data.models.QueryV2ResponseRaw.empty; + else + if options.skipRowsArrayDecode + result = adx.data.models.QueryV2ResponseUnparsedRows(response.Body.Data); + else + result = adx.data.models.QueryV2ResponseRaw(response.Body.Data); + end + end + elseif strcmp(apiVersion, "v1") + if options.skipResponseDecode + result = adx.data.models.QueryV1ResponseRaw.empty; + else + result = adx.data.models.QueryV1ResponseRaw(response.Body.Data); + end + else + warning("adx:queryRun", "Unexpected API version: %s, returning raw data", apiVersion); + result = response.Body.Data; + end + + otherwise % Default output as specified in spec + result = adx.control.models.ErrorResponse(response.Body.Data); + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestProperties.m b/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestProperties.m new file mode 100644 index 0000000..d37e762 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestProperties.m @@ -0,0 +1,28 @@ +classdef ClientRequestProperties < adx.control.JSONMapper +% ClientRequestProperties Adds ClientRequestPropertiesOptions to a query +% See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + Options adx.data.models.ClientRequestPropertiesOptions + Parameters adx.data.models.QueryParameter + end + + % Class methods + methods + % Constructor + function obj = ClientRequestProperties(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.ClientRequestProperties + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end diff --git a/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestPropertiesOptions.m b/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestPropertiesOptions.m new file mode 100644 index 0000000..884a15d --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/ClientRequestPropertiesOptions.m @@ -0,0 +1,134 @@ +classdef ClientRequestPropertiesOptions < adx.control.JSONMapper +% ClientRequestPropertiesOptions Request properties control how a query or command executes and returns results +% See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/request-properties#clientrequestproperties-options + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + % Controls the maximum number of HTTP redirects the client follows during processing + client_max_redirect_count int64 + % If set to true, suppresses reporting of partial query failures within the result set + deferpartialqueryfailures logical + % Provides a hint to use the shuffle strategy for referenced materialized views in the query + materialized_view_shuffle_query string + % Overrides the default maximum amount of memory a query may allocate per node + max_memory_consumption_per_query_per_node int64 + % Overrides the default maximum amount of memory a query operator may allocate + maxmemoryconsumptionperiterator int64 + % Overrides the default maximum number of columns a query is allowed to produce + maxoutputcolumns int64 + % Sets the request timeout to its maximum value. This option can't be modified as part of a set statement + norequesttimeout logical + % Disables truncation of query results returned to the caller + notruncation logical + % If set to true, allows pushing simple selection through aggregation + push_selection_through_aggregation logical + % Specifies the start value to use when evaluating the bin_auto() function + query_bin_auto_at string % literal? + % Specifies the bin size value to use when evaluating the bin_auto() function + query_bin_auto_size string % literal? + % Sets the default parameter value for the cursor_after() function when called without parameters + query_cursor_after_default string + % Sets the default parameter value for the cursor_before_or_at() function when called without parameters + query_cursor_before_or_at_default string + % Overrides the cursor value returned by the cursor_current() function + query_cursor_current string + % Disables the usage of cursor functions within the query context + query_cursor_disabled logical + % Lists table names to be scoped to cursor_after_default cursor_before_or_at() (upper bound is optional) + query_cursor_scoped_tables string % dynamic? + % Controls the data to which the query applies. Supported values are default, all, or hotcache + query_datascope string + % Specifies the column name for the query's datetime scope (query_datetimescope_to / query_datetimescope_from) + query_datetimescope_column string + % Sets the minimum date and time limit for the query scope. If defined, it serves as an autoapplied filter on query_datetimescope_column + query_datetimescope_from {adx.control.JSONMapper.stringDatetime(query_datetimescope_from,'yyyy-MM-dd''T''HH:mm:ss')} + % Sets the maximum date and time limit for the query scope. If defined, it serves as an autoapplied filter on query_datetimescope_column + query_datetimescope_to {adx.control.JSONMapper.stringDatetime(query_datetimescope_to,'yyyy-MM-dd''T''HH:mm:ss')} + % Controls the behavior of subquery merge. The executing node introduces an extra level in the query hierarchy for each subgroup of nodes, and this option sets the subgroup size + query_distribution_nodes_span int32 + % Specifies the percentage of nodes for executing fan-out + query_fanout_nodes_percent int32 + % Specifies the percentage of threads for executing fan-out + query_fanout_threads_percent int32 + % If set to true, enforces row level security rules, even if the policy is disabled + query_force_row_level_security logical + % Determines how the query text should be interpreted. Supported values are csl, kql, or sql + query_language string + % Enables logging of the query parameters for later viewing in the .show queries journal + query_log_query_parameters logical + % Overrides the default maximum number of columns a query is allowed to produce + query_max_entities_in_union int64 + % Overrides the datetime value returned by the now() function + query_now {adx.control.JSONMapper.stringDatetime(query_now,'yyyy-MM-dd''T''HH:mm:ss')} + % If set to true, generates a Python debug query for the enumerated Python node + query_python_debug logical % or int32 int behavior is not defined + % If set, retrieves the schema of each tabular data in the results of the query instead of the data itself + query_results_apply_getschema logical + % If set to true, forces a cache refresh of query results for a specific query. This option can't be modified as part of a set statement + query_results_cache_force_refresh logical + % Controls the maximum age of the cached query results that the service is allowed to return + query_results_cache_max_age duration {mathworks.internal.adx.duration2Timespan(query_results_cache_max_age)} + % If set to true, enables per extent query caching. If set to true, enables per extent query caching + query_results_cache_per_shard logical + % Provides a hint for how many records to send in each update. Takes effect only if results_progressive_enabled is set + query_results_progressive_row_count int64 + % Provides a hint for how often to send progress frames. Takes effect only if results_progressive_enabled is set + query_results_progressive_update_period duration {mathworks.internal.adx.duration2Timespan(query_results_progressive_update_period)} + % Limits query results to a specified number of records + query_take_max_records int64 + % Sets the query weak consistency session ID. Takes effect when queryconsistency mode is set to weakconsistency_by_session_id + query_weakconsistency_session_id string + % Controls query consistency. Supported values are strongconsistency, weakconsistency, weakconsistency_by_query, weakconsistency_by_database, or weakconsistency_by_session_id. When using weakconsistency_by_session_id, ensure to also set the query_weakconsistency_session_id property + queryconsistency string + % Specifies the request application name to be used in reporting. For example, .show queries + request_app_name string + % If set to true, blocks access to tables with row level security policy enabled + request_block_row_level_security logical + % If set to true, prevents request callout to a user-provided service + request_callout_disabled logical + % Allows inclusion of arbitrary text as the request description + request_description string + % If set to true, prevents the request from accessing external data using the externaldata operator or external tables + request_external_data_disabled logical + % If set to true, prevents the request from accessing external tables + request_external_table_disabled logical + % If set to true, indicates that the service shouldn't impersonate the caller's identity + request_impersonation_disabled logical + % If set to true, prevents write access for the request + request_readonly logical + % If set to true, prevents the request from accessing remote databases and clusters + request_remote_entities_disabled logical + % If set to true, prevents the request from invoking code in the sandbox + request_sandboxed_execution_disabled logical + % Specifies the request user to be used in reporting. For example, .show queries + request_user string + % If set to true, enables the progressive query stream + results_progressive_enabled logical + % Overrides the default request timeout. This option can't be modified as part of a set statement + servertimeout duration {mathworks.internal.adx.duration2Timespan(servertimeout)} + % Overrides the default maximum number of records a query is allowed to return to the caller (truncation) + truncation_max_records int64 + % Overrides the default maximum data size a query is allowed to return to the caller (truncation) + truncation_max_size int64 + % Validates the user's permissions to perform the query without actually running the query. Possible results for this property are: OK (permissions are present and valid), Incomplete (validation couldn't be completed due to dynamic schema evaluation), or KustoRequestDeniedException (permissions weren't set). + validatepermissions logical + end + + % Class methods + methods + % Constructor + function obj = ClientRequestPropertiesOptions(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.ClientRequestPropertiesOptions + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/Column.m b/Software/MATLAB/app/system/+adx/+data/+models/Column.m new file mode 100644 index 0000000..5cb4543 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/Column.m @@ -0,0 +1,27 @@ +classdef Column < adx.control.JSONMapper +% Column Represents a Column in a v2 API response + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + ColumnName string + ColumnType string + end + + % Class methods + methods + % Constructor + function obj = Column(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.Column + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/ColumnV1.m b/Software/MATLAB/app/system/+adx/+data/+models/ColumnV1.m new file mode 100644 index 0000000..6629d0a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/ColumnV1.m @@ -0,0 +1,28 @@ +classdef ColumnV1 < adx.control.JSONMapper +% ColumnV1 Represents a Column in a v1 API response + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + ColumnName string + DataType string + ColumnType string + end + + % Class methods + methods + % Constructor + function obj = ColumnV1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.ColumnV1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataSetCompletion.m b/Software/MATLAB/app/system/+adx/+data/+models/DataSetCompletion.m new file mode 100644 index 0000000..3e4e535 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataSetCompletion.m @@ -0,0 +1,28 @@ +classdef DataSetCompletion < adx.control.JSONMapper +% DataSetCompletion Final field of a v2 response + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + HasErrors logical + Cancelled logical + OneApiErrors {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = DataSetCompletion(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataSetCompletion + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataSetHeader.m b/Software/MATLAB/app/system/+adx/+data/+models/DataSetHeader.m new file mode 100644 index 0000000..3fe1151 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataSetHeader.m @@ -0,0 +1,27 @@ +classdef DataSetHeader < adx.control.JSONMapper +% DataSetHeader Header field of a v2 response + +% Copyright 2023-2024 The MathWorks, Inc. + + % Class properties + properties + Version string + IsProgressive logical + end + + % Class methods + methods + % Constructor + function obj = DataSetHeader(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataSetHeader + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataTable.m b/Software/MATLAB/app/system/+adx/+data/+models/DataTable.m new file mode 100644 index 0000000..25f3068 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataTable.m @@ -0,0 +1,30 @@ +classdef DataTable < adx.control.JSONMapper + % DataTable Represents a v1 API format table + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableId double + TableKind adx.data.models.TableKind + TableName string + Columns adx.data.models.Column {adx.control.JSONMapper.JSONArray} + Rows {adx.control.JSONMapper.JSONArray, adx.control.JSONMapper.fieldName(Rows,"Rows")} + end + + % Class methods + methods + % Constructor + function obj = DataTable(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataTable + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataTableV1.m b/Software/MATLAB/app/system/+adx/+data/+models/DataTableV1.m new file mode 100644 index 0000000..c71b05e --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataTableV1.m @@ -0,0 +1,28 @@ +classdef DataTableV1 < adx.control.JSONMapper +% DataTableV1 Represents a v1 API format table + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableName (1,1) string + Columns adx.data.models.ColumnV1 {adx.control.JSONMapper.JSONArray} + Rows string {adx.control.JSONMapper.JSONArray, adx.control.JSONMapper.doNotParse, adx.control.JSONMapper.fieldName(Rows,"Rows")} + end + + % Class methods + methods + % Constructor + function obj = DataTableV1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataTableV1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataTables.m b/Software/MATLAB/app/system/+adx/+data/+models/DataTables.m new file mode 100644 index 0000000..c833a72 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataTables.m @@ -0,0 +1,25 @@ +classdef DataTables < adx.control.JSONMapper + % DataTables Represents an array of v2 API tables + + % Copyright 2023 The MathWorks, Inc. + + properties + Tables adx.data.models.DataTable {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = DataTables(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataTables + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/DataTablesV1.m b/Software/MATLAB/app/system/+adx/+data/+models/DataTablesV1.m new file mode 100644 index 0000000..1b15c65 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/DataTablesV1.m @@ -0,0 +1,25 @@ +classdef DataTablesV1 < adx.control.JSONMapper + % DataTablesV1 Represents an array of v1 API tables + + % Copyright 2023 The MathWorks, Inc. + + properties + Tables adx.data.models.DataTableV1 {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = DataTablesV1(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.DataTablesV1 + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/IngestionResourcesSnapshot.m b/Software/MATLAB/app/system/+adx/+data/+models/IngestionResourcesSnapshot.m new file mode 100644 index 0000000..e437a19 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/IngestionResourcesSnapshot.m @@ -0,0 +1,102 @@ +classdef IngestionResourcesSnapshot + % INGESTIONRESOURCESSNAPSHOT Contains result of .get ingestion resources request + % + % Example: + % + % managementClient = adx.data.api.Management(); + % [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources')); + % if code == matlab.net.http.StatusCode.OK + % irs = adx.data.models.IngestionResourcesSnapshot(result); + % end + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/netfx/kusto-ingest-client-rest#retrieve-ingestion-resources + + % Copyright 2023 The MathWorks, Inc. + + properties + SecuredReadyForAggregationQueue string + TempStorage string + FailedIngestionsQueue string + SuccessfulIngestionsQueue string + IngestionsStatusTable string + Data adx.data.models.DataTableV1 + end + + methods + function obj = IngestionResourcesSnapshot(dt) + % INGESTIONRESOURCESSNAPSHOT Constructor for IngestionResourcesSnapshot object + arguments + dt adx.data.models.QueryV1ResponseRaw + end + + if ~isprop(dt, 'Tables') + error("adx:IngestionResourcesSnapshot", "Tables property not found"); + end + + if ~isprop(dt.Tables, 'TableName') + error("adx:IngestionResourcesSnapshot", "Tables.TableName property not found"); + end + + if ~isprop(dt.Tables, 'Columns') + error("adx:IngestionResourcesSnapshot", "Tables.Columns property not found"); + end + + if ~isprop(dt.Tables, 'Rows') + error("adx:IngestionResourcesSnapshot", "Tables.Rows property not found"); + end + + if ~strcmp(dt.Tables.TableName, 'Table_0') + error("adx:IngestionResourcesSnapshot", "Unexpected TableName: %s", dt.Tables.TableName); + end + + if numel(dt.Tables.Columns) ~= 2 + error("adx:IngestionResourcesSnapshot", "Expected 2 columns"); + end + + obj.Data = dt.Tables; + + for n = 1:numel(dt.Tables.Rows) + decodedRow = jsondecode(dt.Tables.Rows(n)); + if iscell(decodedRow) + if strcmp(decodedRow{1}, 'SecuredReadyForAggregationQueue') + obj.SecuredReadyForAggregationQueue(end+1) = decodedRow{2}; + elseif strcmp(decodedRow{1}, 'TempStorage') + obj.TempStorage(end+1) = decodedRow{2}; + elseif strcmp(decodedRow{1}, 'FailedIngestionsQueue') + obj.FailedIngestionsQueue(end+1) = decodedRow{2}; + elseif strcmp(decodedRow{1}, 'SuccessfulIngestionsQueue') + obj.SuccessfulIngestionsQueue(end+1) = decodedRow{2}; + elseif strcmp(decodedRow{1}, 'IngestionsStatusTable') + obj.IngestionsStatusTable(end+1) = decodedRow{2}; + end + else + % Unexpected fields for IRS + end + end + end + + + function T = table(obj) + % TABLE Convert a IngestionResourcesSnapshot Data property to a MATLAB table + nrows = numel(obj.Data.Rows); + + sz = [nrows, 2]; + varNames = [obj.Data.Columns(1).ColumnName, obj.Data.Columns(2).ColumnName]; + varTypes = [obj.Data.Columns(1).ColumnType, obj.Data.Columns(2).ColumnType]; + T = table('Size',sz,'VariableTypes',varTypes, 'VariableNames', varNames); + + for n = 1:nrows + decodedRow = jsondecode(obj.Data.Rows(n)); + if iscell(decodedRow) + if numel(decodedRow) ~= 2 + error("adx:IngestionResourcesSnapshot:table", "Expected a cell array with 2 entries found: %d", numel(decodedRow)); + else + T(n,:) = decodedRow'; + end + else + error("adx:IngestionResourcesSnapshot:table", "Expected cell array output"); + end + end + end + end +end diff --git a/Software/MATLAB/app/system/+adx/+data/+models/ManagementRequest.m b/Software/MATLAB/app/system/+adx/+data/+models/ManagementRequest.m new file mode 100644 index 0000000..ab9e195 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/ManagementRequest.m @@ -0,0 +1,37 @@ +classdef ManagementRequest < adx.control.JSONMapper + % ManagementRequest Defines a Request Object for a management query + % If a database field is defined in the default configuration file + % location its value will be used for the db property. + + % Copyright 2023-2024 The MathWorks, Inc. + + % Class properties + properties + csl string + db string + requestProperties adx.data.models.ClientRequestProperties { adx.control.JSONMapper.fieldName(requestProperties,"properties") } + end + + % Class methods + methods + % Constructor + function obj = ManagementRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.ManagementRequest + end + obj@adx.control.JSONMapper(s,inputs); + + if isempty(obj.db) || strlength(obj.db) == 0 + cfg = mathworks.internal.adx.loadConfig(); + if isfield(cfg, 'database') && strlength(cfg.database) > 0 + obj.db = cfg.database; + end + end + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueryParameter.m b/Software/MATLAB/app/system/+adx/+data/+models/QueryParameter.m new file mode 100644 index 0000000..b69fa64 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueryParameter.m @@ -0,0 +1,34 @@ +classdef QueryParameter < adx.control.JSONMapper +% QueryParameter Represents Key Value pairs for queries +% See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + % The name of a query parameter used in the query + Name string + % The corresponding type, such as string or datetime + % The values provided by the user are encoded as strings. + % The appropriate parse method is applied to the query parameter to get a strongly-typed value. + Value string + % A default value for the parameter. This value must be a literal of the appropriate scalar type + DefaultValue string + end + + % Class methods + methods + % Constructor + function obj = QueryParameter(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueryParameter + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueryRequest.m b/Software/MATLAB/app/system/+adx/+data/+models/QueryRequest.m new file mode 100644 index 0000000..83a3dd4 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueryRequest.m @@ -0,0 +1,37 @@ +classdef QueryRequest < adx.control.JSONMapper + % QueryRequest Defines a Request Object for a query + % If a database field is defined in the default configuration file + % location its value will be used for the db property. + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + csl string + db string + requestProperties adx.data.models.ClientRequestProperties { adx.control.JSONMapper.fieldName(requestProperties,"properties") } + end + + % Class methods + methods + % Constructor + function obj = QueryRequest(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueryRequest + end + obj@adx.control.JSONMapper(s,inputs); + + if isempty(obj.db) || strlength(obj.db) == 0 + cfg = mathworks.internal.adx.loadConfig(); + if isfield(cfg, 'database') && strlength(cfg.database) > 0 + obj.db = cfg.database; + end + end + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueryV1ResponseRaw.m b/Software/MATLAB/app/system/+adx/+data/+models/QueryV1ResponseRaw.m new file mode 100644 index 0000000..32b6b16 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueryV1ResponseRaw.m @@ -0,0 +1,25 @@ +classdef QueryV1ResponseRaw < adx.control.JSONMapper + % QueryV1ResponseRaw Represents a v1 API response prior to conversion to a table or error + + % Copyright 2023 The MathWorks, Inc. + + properties + Tables adx.data.models.DataTableV1 {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = QueryV1ResponseRaw(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueryV1ResponseRaw + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseRaw.m b/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseRaw.m new file mode 100644 index 0000000..7c59020 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseRaw.m @@ -0,0 +1,79 @@ +classdef QueryV2ResponseRaw < adx.control.JSONMapper + % QueryV2ResponseRaw Represents a v2 API response prior to conversion to a table or error + + % Copyright 2023-2024 The MathWorks, Inc. + + % Class properties + properties + FrameType {adx.control.JSONMapper.JSONArray} + % DataSetHeader + Version string + IsProgressive logical + % DataTable + TableId double + TableKind adx.data.models.TableKind + TableName string + Columns adx.data.models.Column {adx.control.JSONMapper.JSONArray} + Rows string {adx.control.JSONMapper.JSONArray, adx.control.JSONMapper.doNotParse, adx.control.JSONMapper.fieldName(Rows,"Rows")} + % DataSetCompletion + HasErrors logical + Cancelled logical + OneApiErrors {adx.control.JSONMapper.JSONArray} + % TableFragment + FieldCount double + TableFragmentType adx.data.models.TableFragmentType + % TableProgress + TableProgressProp double {adx.control.JSONMapper.fieldName(TableProgressProp,"TableProgress")} + % TableCompletion + RowCount double + end + + % Class methods + methods + % Constructor + function obj = QueryV2ResponseRaw(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueryV2ResponseRaw + end + obj@adx.control.JSONMapper(s,inputs); + end + + + % Should be called on the first frame in a QueryV2ResponseRaw only + function dataSetHeader = getDataSetHeader(obj) + if isprop(obj, 'FrameType') + if strcmpi(obj.FrameType, "datasetheader") + dataSetHeader = adx.data.models.DataSetHeader(... + 'Version', obj.Version,... + 'IsProgressive', obj.IsProgressive); + else + error("adx:QueryV2ResponseRaw","Expected first frame to be a DataSetHeader, found: %s", obj.FrameType); + end + else + error("adx:QueryV2ResponseRaw","Expected first frame to the have a FrameType property"); + end + end + + + function dataSetCompletion = getDataSetCompletionFrame(obj) + if isprop(obj, 'FrameType') + if strcmpi(obj.FrameType, "dataSetCompletion") + dataSetCompletion = adx.data.models.DataSetCompletion(... + 'HasErrors', obj.HasErrors,... + 'Cancelled', obj.Cancelled,... + 'OneApiErrors', obj.OneApiErrors); + else + error("adx:QueryV2ResponseRaw","Expected last frame to be a DataSetCompletion, found: %s", obj.FrameType); + end + else + error("adx:QueryV2ResponseRaw","Expected last frame to the have a FrameType property"); + end + end + + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseUnparsedRows.m b/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseUnparsedRows.m new file mode 100644 index 0000000..511575c --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueryV2ResponseUnparsedRows.m @@ -0,0 +1,79 @@ +classdef QueryV2ResponseUnparsedRows < adx.control.JSONMapper + % QueryV2ResponseUnparsedRows Represents a v2 API response prior to conversion to a table or error Rows are not parsed + + % Copyright 2024 The MathWorks, Inc. + + % Class properties + properties + FrameType {adx.control.JSONMapper.JSONArray} + % DataSetHeader + Version string + IsProgressive logical + % DataTable + TableId double + TableKind adx.data.models.TableKind + TableName string + Columns adx.data.models.Column {adx.control.JSONMapper.JSONArray} + Rows string {adx.control.JSONMapper.doNotParse, adx.control.JSONMapper.fieldName(Rows,"Rows")} + % DataSetCompletion + HasErrors logical + Cancelled logical + OneApiErrors {adx.control.JSONMapper.JSONArray} + % TableFragment + FieldCount double + TableFragmentType adx.data.models.TableFragmentType + % TableProgress + TableProgressProp double {adx.control.JSONMapper.fieldName(TableProgressProp,"TableProgress")} + % TableCompletion + RowCount double + end + + % Class methods + methods + % Constructor + function obj = QueryV2ResponseUnparsedRows(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueryV2ResponseUnparsedRows + end + obj@adx.control.JSONMapper(s,inputs); + end + + + % Should be called on the first frame in a QueryV2ResponseUnparsedRows only + function dataSetHeader = getDataSetHeader(obj) + if isprop(obj, 'FrameType') + if strcmpi(obj.FrameType, "datasetheader") + dataSetHeader = adx.data.models.DataSetHeader(... + 'Version', obj.Version,... + 'IsProgressive', obj.IsProgressive); + else + error("adx:QueryV2ResponseUnparsedRows","Expected first frame to be a DataSetHeader, found: %s", obj.FrameType); + end + else + error("adx:QueryV2ResponseUnparsedRows","Expected first frame to the have a FrameType property"); + end + end + + + function dataSetCompletion = getDataSetCompletionFrame(obj) + if isprop(obj, 'FrameType') + if strcmpi(obj.FrameType, "dataSetCompletion") + dataSetCompletion = adx.data.models.DataSetCompletion(... + 'HasErrors', obj.HasErrors,... + 'Cancelled', obj.Cancelled,... + 'OneApiErrors', obj.OneApiErrors); + else + error("adx:QueryV2ResponseUnparsedRows","Expected last frame to be a DataSetCompletion, found: %s", obj.FrameType); + end + else + error("adx:QueryV2ResponseUnparsedRows","Expected last frame to the have a FrameType property"); + end + end + + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/QueueIngestionMessage.m b/Software/MATLAB/app/system/+adx/+data/+models/QueueIngestionMessage.m new file mode 100644 index 0000000..d3fc15f --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/QueueIngestionMessage.m @@ -0,0 +1,49 @@ +classdef QueueIngestionMessage < adx.control.JSONMapper + % QueueIngestionMessage The message that the Kusto Data Management service expects to read from the input Azure Queue is a JSON document in the following format + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + % Message identifier (GUID) + Id string + % Path (URI) to the blob, including the SAS key granting permissions to read/write/delete it. + % Permissions are required so that the ingestion service can delete the blob once it has completed ingesting the data. + % https://.blob.core.windows.net//? + BlobPath string + % Size of the uncompressed data in bytes. Providing this value allows the ingestion + % service to optimize ingestion by potentially aggregating multiple blobs. + % This property is optional, but if not given, the service will access the blob just to retrieve the size. + RawDataSize int64 + % Target database name + DatabaseName string + % Target table name + TableName string + % If set to true, the blob won't be deleted once ingestion is successfully completed. Default is false. + RetainBlobOnSuccess logical = false + % If set to true, any aggregation will be skipped. Default is false + FlushImmediately logical = false + % Success/Error reporting level: 0-Failures, 1-None, 2-All + ReportLevel int32 + % Reporting mechanism: 0-Queue, 1-Table + ReportMethod int32 + % Other properties such as format, tags, and creationTime. For more information, see data ingestion properties. + AdditionalProperties adx.control.JSONMapperMap + end + + % Class methods + methods + % Constructor + function obj = QueueIngestionMessage(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.QueueIngestionMessage + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/Row.m b/Software/MATLAB/app/system/+adx/+data/+models/Row.m new file mode 100644 index 0000000..b47c399 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/Row.m @@ -0,0 +1,28 @@ +classdef Row < adx.control.JSONMapper +% Row Represents a row that is parsed by JSONMapper +% Class not used pending updated JSONMapper capability to handle simple arrays + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + RowStr string + end + + + % Class methods + methods + % Constructor + function obj = Row(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.Row + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/RowUnparsed.m b/Software/MATLAB/app/system/+adx/+data/+models/RowUnparsed.m new file mode 100644 index 0000000..d5ae226 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/RowUnparsed.m @@ -0,0 +1,28 @@ +classdef RowUnparsed < adx.control.JSONMapper +% RowUnparsed Row data returned which is not to be parsed by JSONMapper +% Value is held an an unparsed string + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + unparsedJSON string {adx.control.JSONMapper.doNotParse} + end + + + % Class methods + methods + % Constructor + function obj = RowUnparsed(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.RowUnparsed + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/RowsUnparsed.m b/Software/MATLAB/app/system/+adx/+data/+models/RowsUnparsed.m new file mode 100644 index 0000000..f873dec --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/RowsUnparsed.m @@ -0,0 +1,28 @@ +classdef RowsUnparsed < adx.control.JSONMapper +% RowsUnparsed Row data returned which is not to be parsed by JSONMapper +% Value is held an an unparsed string + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + unparsedJSON string + end + + + % Class methods + methods + % Constructor + function obj = RowsUnparsed(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.RowsUnparsed + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/StreamFormat.m b/Software/MATLAB/app/system/+adx/+data/+models/StreamFormat.m new file mode 100644 index 0000000..f2e9cf9 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/StreamFormat.m @@ -0,0 +1,19 @@ +classdef StreamFormat + % STREAMFORMAT Specifies the format of the data in the request body + % The value should be one of: CSV, TSV, SCsv, SOHsv, PSV, JSON, MultiJSON, Avro + % See: https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-supported-formats + + % Copyright 2023 The MathWorks, Inc. + + enumeration + CSV + TSV + SCsv + SOHsv + PSV + JSON + MultiJSON + Avro + end +end + diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableCompletion.m b/Software/MATLAB/app/system/+adx/+data/+models/TableCompletion.m new file mode 100644 index 0000000..21bfa95 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableCompletion.m @@ -0,0 +1,27 @@ +classdef TableCompletion < adx.control.JSONMapper +% TableCompletion Field to indicate the end of a table + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableId double + RowCount double + end + + % Class methods + methods + % Constructor + function obj = TableCompletion(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.TableCompletion + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableFragment.m b/Software/MATLAB/app/system/+adx/+data/+models/TableFragment.m new file mode 100644 index 0000000..1b725f6 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableFragment.m @@ -0,0 +1,29 @@ +classdef TableFragment < adx.control.JSONMapper +% TableFragment A part of a returned table + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableId double + FieldCount double + TableFragmentType adx.data.models.TableFragmentType + Rows {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = TableFragment(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.TableFragment + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableFragmentType.m b/Software/MATLAB/app/system/+adx/+data/+models/TableFragmentType.m new file mode 100644 index 0000000..b8c771a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableFragmentType.m @@ -0,0 +1,16 @@ +classdef TableFragmentType < adx.control.JSONEnum + % TableFragmentType Describes what the client should do with this fragment + % The value should be one of: + % DataAppend + % DataReplace + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 + + % Copyright 2023 The MathWorks, Inc. + + enumeration + DataAppend ("DataAppend") + DataReplace ("DataReplace") + end +end + diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableHeader.m b/Software/MATLAB/app/system/+adx/+data/+models/TableHeader.m new file mode 100644 index 0000000..78db942 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableHeader.m @@ -0,0 +1,29 @@ +classdef TableHeader < adx.control.JSONMapper +% TableHeader Header fields with top-level table properties + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableId double + TableKind adx.data.models.TableKind + TableName string + Columns adx.data.models.Column {adx.control.JSONMapper.JSONArray} + end + + % Class methods + methods + % Constructor + function obj = TableHeader(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.TableHeader + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableKind.m b/Software/MATLAB/app/system/+adx/+data/+models/TableKind.m new file mode 100644 index 0000000..d17b76a --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableKind.m @@ -0,0 +1,28 @@ +classdef TableKind < adx.control.JSONEnum + % TableKind Specifies the type of a Table response + % The value should be one of: + % PrimaryResult + % QueryCompletionInformation + % QueryTraceLog + % QueryPerfLog + % TableOfContents + % QueryProperties + % QueryPlan + % Unknown + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 + + % Copyright 2023 The MathWorks, Inc. + + enumeration + PrimaryResult ("PrimaryResult") + QueryCompletionInformation ("QueryCompletionInformation") + QueryTraceLog ("QueryTraceLog") + QueryPerfLog ("QueryPerfLog") + TableOfContents ("TableOfContents") + QueryProperties ("QueryProperties") + QueryPlan ("QueryPlan") + Unknown ("Unknown") + end +end + diff --git a/Software/MATLAB/app/system/+adx/+data/+models/TableProgress.m b/Software/MATLAB/app/system/+adx/+data/+models/TableProgress.m new file mode 100644 index 0000000..79bedb4 --- /dev/null +++ b/Software/MATLAB/app/system/+adx/+data/+models/TableProgress.m @@ -0,0 +1,27 @@ +classdef TableProgress < adx.control.JSONMapper +% TableProgress Indicates the percentage of a task task that is complete + +% Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + TableId double + TableProgressProp double + end + + % Class methods + methods + % Constructor + function obj = TableProgress(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?adx.data.models.TableProgress + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+azure/+core/+credential/@TokenCredential/TokenCredential.m b/Software/MATLAB/app/system/+azure/+core/+credential/@TokenCredential/TokenCredential.m index 93a22f0..7b672fe 100644 --- a/Software/MATLAB/app/system/+azure/+core/+credential/@TokenCredential/TokenCredential.m +++ b/Software/MATLAB/app/system/+azure/+core/+credential/@TokenCredential/TokenCredential.m @@ -1,23 +1,33 @@ classdef (Abstract) TokenCredential < azure.object % TOKENCREDENTIAL Credential that can provide an access token - % Copyright 2020-2021 The MathWorks, Inc. + % Copyright 2020-2023 The MathWorks, Inc. methods function accessToken = getToken(obj, request) - % GETTOKEN Retrieves an AccessToken + % GETTOKEN Asynchronously retrieves an AccessToken % An azure.core.credential.AccessToken is returned. - - % Copyright 2020-2022 The MathWorks, Inc. + % This call is invokes the getTokenSync method rather than + % getToken intentionally. if ~isa(request, 'azure.core.credential.TokenRequestContext') logObj = Logger.getLogger(); write(logObj,'error','Invalid credential argument'); end - - accessTokenj = obj.Handle.getToken(request.Handle); + accessTokenj = obj.Handle.getTokenSync(request.Handle); accessToken = azure.core.credential.AccessToken(accessTokenj); + end + + function accessToken = getTokenSync(obj, request) + % GETTOKENSYNC Synchronously retrieves an AccessToken + % An azure.core.credential.AccessToken is returned. + if ~isa(request, 'azure.core.credential.TokenRequestContext') + logObj = Logger.getLogger(); + write(logObj,'error','Invalid credential argument'); + end + accessTokenj = obj.Handle.getTokenSync(request.Handle); + accessToken = azure.core.credential.AccessToken(accessTokenj); end end diff --git a/Software/MATLAB/app/functions/compareAuthEnvVars.m b/Software/MATLAB/app/system/+azure/+mathworks/+internal/compareAuthEnvVars.m similarity index 100% rename from Software/MATLAB/app/functions/compareAuthEnvVars.m rename to Software/MATLAB/app/system/+azure/+mathworks/+internal/compareAuthEnvVars.m diff --git a/Software/MATLAB/app/functions/datetime2OffsetDateTime.m b/Software/MATLAB/app/system/+azure/+mathworks/+internal/datetime2OffsetDateTime.m similarity index 100% rename from Software/MATLAB/app/functions/datetime2OffsetDateTime.m rename to Software/MATLAB/app/system/+azure/+mathworks/+internal/datetime2OffsetDateTime.m diff --git a/Software/MATLAB/app/system/+azure/+mathworks/+internal/int64FnHandler.m b/Software/MATLAB/app/system/+azure/+mathworks/+internal/int64FnHandler.m new file mode 100644 index 0000000..7092bc7 --- /dev/null +++ b/Software/MATLAB/app/system/+azure/+mathworks/+internal/int64FnHandler.m @@ -0,0 +1,19 @@ +function result = int64FnHandler(obj, varargin) + % int64FnHandler Invokes Java method to convert a Java long to a string and then an int64 + % An int64 is returned. + + % Copyright 2023 The MathWorks, Inc. + + if nargin == 1 + % Use the stack to figure out the calling function + stack = dbstack; + fnName = (split(stack(2).name, '.')); + result = sscanf(char(com.mathworks.azure.sdk.Version.invokeNamedMethodToString(obj.Handle, fnName{end})), '%ld'); + elseif nargin == 2 + % Use a named function + result = sscanf(char(com.mathworks.azure.sdk.Version.invokeNamedMethodToString(obj.Handle, varargin{1})), '%ld'); + else + logObj = Logger.getLogger(); + write(logObj,'error','Unexpected number of arguments'); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobItemProperties/BlobItemProperties.m b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobItemProperties/BlobItemProperties.m index e2ec6a1..2d43cb2 100644 --- a/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobItemProperties/BlobItemProperties.m +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobItemProperties/BlobItemProperties.m @@ -25,7 +25,6 @@ value = char(obj.Handle.getCacheControl); end - function value = getContentEncoding(obj) % GETCONTENTENCODING Get the getContentEncoding property value = char(obj.Handle.getContentEncoding); diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/BlobProperties.m b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/BlobProperties.m new file mode 100644 index 0000000..e260084 --- /dev/null +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/BlobProperties.m @@ -0,0 +1,61 @@ +classdef BlobProperties < azure.object + % BlobProperties Properties of a blob + + % Copyright 2023 The MathWorks, Inc. + + properties + end + + methods + function obj = BlobProperties(varargin) + initialize('loggerPrefix', 'Azure:ADLSG2'); + + if nargin == 0 + obj.Handle = com.azure.storage.blob.models.BlobProperties(); + elseif nargin == 1 && isa(varargin{1}, 'com.azure.storage.blob.models.BlobProperties') + obj.Handle = varargin{1}; + else + logObj = Logger.getLogger(); + write(logObj,'error','Invalid argument(s), expected no argument or a com.azure.storage.blob.models.BlobProperties'); + end + end %constructor + + function value = getCacheControl(obj) + % GETCACHECONTROL Get the the cache control of the blob + value = char(obj.Handle.getCacheControl); + end + + function value = getContentEncoding(obj) + % GETCONTENTENCODING Get the content encoding of the blob + value = char(obj.Handle.getContentEncoding); + end + + function value = getContentLanguage(obj) + % GETCONTENTLANGUAGE Get the content language of the blob + value = char(obj.Handle.getContentLanguage); + end + + function value = getContentType(obj) + % GETCONTENTTYPE Get the content type of the blob + value = char(obj.Handle.getContentType); + end + + function value = getContentMd5(obj) + % GETCONTENTMD5 Get the MD5 of the blob's content + % Return the base64 value shown in the Azure portal + b64int8 = obj.Handle.getContentMd5; + b64int8 = b64int8'; + b64uint8 = zeros(1,numel(b64int8), 'uint8'); + for n = 1:numel(b64int8) + if b64int8(n) < 0 + b64uint8(n) = int32(b64int8(n)) + 256; + else + b64uint8(n) = b64int8(n); + end + end + uint8Val = matlab.net.base64encode(b64uint8); + value = char(uint8Val); + end + + end %methods +end %class diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/getBlobSize.m b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/getBlobSize.m new file mode 100644 index 0000000..b4f4845 --- /dev/null +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/+models/@BlobProperties/getBlobSize.m @@ -0,0 +1,8 @@ +function size = getBlobSize(obj) + % GETBLOBSIZE Gets the size of the blob in bytes + % An int64 is returned. + + % Copyright 2023 The MathWorks, Inc. + + size = azure.mathworks.internal.int64FnHandler(obj); +end diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/+sas/@BlobServiceSasSignatureValues/BlobServiceSasSignatureValues.m b/Software/MATLAB/app/system/+azure/+storage/+blob/+sas/@BlobServiceSasSignatureValues/BlobServiceSasSignatureValues.m index c29e490..c1cb2fd 100644 --- a/Software/MATLAB/app/system/+azure/+storage/+blob/+sas/@BlobServiceSasSignatureValues/BlobServiceSasSignatureValues.m +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/+sas/@BlobServiceSasSignatureValues/BlobServiceSasSignatureValues.m @@ -13,7 +13,7 @@ % permissions: azure.storage.blob.sas.BlobSasPermission or % BlobContainerSasPermission -% Copyright 2020-2022 The MathWorks, Inc. +% Copyright 2020-2024 The MathWorks, Inc. methods function obj = BlobServiceSasSignatureValues(varargin) @@ -26,7 +26,7 @@ if ~(isdatetime(expiryTime) || isscalar(expiryTime)) write(logObj,'error','Expected argument of type scalar datetime'); end - expiryTimej = datetime2OffsetDateTime(expiryTime); + expiryTimej = azure.mathworks.internal.datetime2OffsetDateTime(expiryTime); permissions = varargin{2}; if ~(isa(permissions, 'azure.storage.blob.sas.BlobSasPermission') ... || isa(permissions, 'azure.storage.blob.sas.BlobContainerSasPermission')) diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobClient/getProperties.m b/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobClient/getProperties.m new file mode 100644 index 0000000..94af993 --- /dev/null +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobClient/getProperties.m @@ -0,0 +1,7 @@ +function blobProperties = getProperties(obj) + % GETPROPERTIES Returns the blob's metadata and properties + + % Copyright 2023 The MathWorks, Inc. + + blobProperties = azure.storage.blob.models.BlobProperties(obj.Handle.getProperties()); +end diff --git a/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobServiceClient/getUserDelegationKey.m b/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobServiceClient/getUserDelegationKey.m index 5376254..4e799aa 100644 --- a/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobServiceClient/getUserDelegationKey.m +++ b/Software/MATLAB/app/system/+azure/+storage/+blob/@BlobServiceClient/getUserDelegationKey.m @@ -15,15 +15,15 @@ % % key = sc.getUserDelegationKey(datetime('now'),datetime('now')+hours(1)) -% Copyright 2022 The MathWorks, Inc. +% Copyright 2022-2024 The MathWorks, Inc. if ~isdatetime(start) && ~isdatetime(expiry) logObj = Logger.getLogger(); write(logObj,'error','Expected start and expiry arguments of type datetime'); end -jStart = datetime2OffsetDateTime(start); -jExpiry = datetime2OffsetDateTime(expiry); +jStart = azure.mathworks.internal.datetime2OffsetDateTime(start); +jExpiry = azure.mathworks.internal.datetime2OffsetDateTime(expiry); jKey = obj.Handle.getUserDelegationKey(jStart,jExpiry); key = azure.storage.blob.models.UserDelegationKey(jKey); \ No newline at end of file diff --git a/Software/MATLAB/app/system/+azure/+storage/+file/+datalake/+sas/@DataLakeServiceSasSignatureValues/DataLakeServiceSasSignatureValues.m b/Software/MATLAB/app/system/+azure/+storage/+file/+datalake/+sas/@DataLakeServiceSasSignatureValues/DataLakeServiceSasSignatureValues.m index ee8999c..65ac949 100644 --- a/Software/MATLAB/app/system/+azure/+storage/+file/+datalake/+sas/@DataLakeServiceSasSignatureValues/DataLakeServiceSasSignatureValues.m +++ b/Software/MATLAB/app/system/+azure/+storage/+file/+datalake/+sas/@DataLakeServiceSasSignatureValues/DataLakeServiceSasSignatureValues.m @@ -34,7 +34,7 @@ if ~(isdatetime(expiryTime) || isscalar(expiryTime)) write(logObj,'error','Expected argument of type scalar datetime'); end - expiryTimej = datetime2OffsetDateTime(expiryTime); + expiryTimej = azure.mathworks.internal.datetime2OffsetDateTime(expiryTime); permissions = varargin{2}; if ~(isa(permissions, 'azure.storage.file.datalake.sas.PathSasPermission') ... || isa(permissions, 'azure.storage.file.datalake.sas.FileSystemSasPermission')) diff --git a/Software/MATLAB/app/system/+azure/+storage/+queue/@QueueClient/receiveMessages.m b/Software/MATLAB/app/system/+azure/+storage/+queue/@QueueClient/receiveMessages.m new file mode 100644 index 0000000..1d165c4 --- /dev/null +++ b/Software/MATLAB/app/system/+azure/+storage/+queue/@QueueClient/receiveMessages.m @@ -0,0 +1,94 @@ +function queueMessageItems = receiveMessages(obj, varargin) + % RECEIVEMESSAGES Retrieves up to the maximum number of messages from the queue + % Messages are hidden from other operations for the timeout period. + % + % maxMessages + % Maximum number of messages to get. + % If there are less messages exist in the queue than requested + % all the messages will be returned. If left empty only 1 message + % will be retrieved, the allowed range is 1 to 32 messages. + % + % visibilityTimeout - Optional. + % The timeout period for how long the message is invisible in + % the queue. If left empty the received messages will be + % invisible for 30 seconds. The timeout must be between 1 + % second and 7 days. + % + % timeout - Optional. + % Timeout applied to the operation. + % If a response is not returned before the timeout concludes + % a RuntimeException will be thrown. + % + % context - TODO + % + % If a any of visibilityTimeout, timeout or context are provided all must be + % provided. + % + % An array of QueueMessageItem is returned. + + % Copyright 2023 The MathWorks, Inc. + + p = inputParser; + p.CaseSensitive = false; + validSeconds = @(x) isa(x, 'double') || isa(x, 'int32') || isa(x, 'int64') || isduration(x); + validMaxMessages = @(x) isa(x, 'double') || isa(x, 'int32'); + p.FunctionName = mfilename; + addParameter(p, 'maxMessages', int32(32), validMaxMessages); + addParameter(p, 'visibilityTimeout', [], validSeconds); + addParameter(p, 'timeout', [], validSeconds); + parse(p,varargin{:}); + + args = {}; + + if ~isempty(p.Results.maxMessages) + maxMessages = int32(p.Results.maxMessages); + if maxMessages < 1 || maxMessages > 32 + logObj = Logger.getLogger(); + write(logObj,'error','maxMessages allowed range is 1 to 32'); + else + args{end+1} = java.lang.Integer(maxMessages); + end + else + args{end+1} = java.lang.Integer(int32(32)); + end + if ~isempty(p.Results.visibilityTimeout) + if isduration(p.Results.visibilityTimeout) + secs = int64(seconds(p.Results.visibilityTimeout)); + else + secs = int64(visibilityTimeout); + end + jd = java.time.Duration.ofSeconds(secs); + args{end+1} = jd; + end + if ~isempty(p.Results.timeout) + if isduration(p.Results.timeout) + secs = int64(seconds(p.Results.timeout)); + else + secs = int64(timeout); + end + jd = java.time.Duration.ofSeconds(secs); + args{end+1} = jd; + end + + queueMessageItemsJ = obj.Handle.receiveMessages(args{:}); + + % Return an array of QueueMessageItems + queueMessageItems = azure.storage.queue.models.QueueMessageItem.empty; + + % Retrieve the iterator for the object + pageIterator = queueMessageItemsJ.iterableByPage().iterator(); + + while pageIterator.hasNext() + pagedResponse = pageIterator.next(); + itemsj = pagedResponse.getItems(); + for n = 1:itemsj.size + queueMessageItemj = itemsj.get(n-1); + if ~isa(queueMessageItemj, 'com.azure.storage.queue.models.QueueMessageItem') + logObj = Logger.getLogger(); + write(logObj,'warning','Expected item of type com.azure.storage.queue.models.QueueMessageItem'); + else + queueMessageItems(end+1) = azure.storage.queue.models.QueueMessageItem(queueMessageItemj); %#ok + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/KQLQuery.m b/Software/MATLAB/app/system/+mathworks/+adx/KQLQuery.m new file mode 100644 index 0000000..3767f96 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/KQLQuery.m @@ -0,0 +1,174 @@ +function [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = KQLQuery(query, options) + % KQLQuery Runs a KQL query + % + % Required argument + % query: query to be run as a string or character vector + % + % Optional arguments + % database: Name of the the database to be used, by default a value will be + % taken from the settings JSON file. + % + % propertyNames: Property names to be applies to the query, specified as a + % string array. + % + % propertyValues: Property values that correspond the propertyNames, specified + % as a cell array. + % + % type: Force the type of the query, options are "query" or "command" by default + % the query will be examined to determine the type. + % + % cluster: A non default cluster can be specified as a string or character vector. + % + % bearerToken: Token used to authenticate KQL queries only, overrides JSON + % settings file based authentication. Provided as a text scalar. + % + % convertDynamics: Logical to determine if dynamic fields are decoded or not. + % + % nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + % null values are handled in returned results. + % + % useParallel: A logical to enable the use of Parallel Computing Toolbox if + % available to improve performance on large queries. + % Default is false. Applies to KQL queries only. + % See: Documentation/Performance.md for more details. + % + % parallelThreshold: The number of rows above which a parpool will be started + % rather than just working serially, if making a large + % query or repeated queries then the overhead caused by + % the creation of a parpool should be amortized. + % The default is 1000 rows. + % + % verbose: A logical to enable additional output. Default is false. + % + % + % Return values + % result: Table containing the primary result of the query or command. If the + % request failed the result will be a adx.control.models.ErrorResponse + % rather than a table. + % + % success: A logical to indicate if the query succeed or not. + % + % requestId: The request's ID string in ADX. + % + % resultTables: Returned tables including metadata, values have not been processed + % into MATLAB Tables. + % + % dataSetHeader: For calls that use the V2 REST API the value contains version + % information and whether the call is progressive or not. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + % + % dataSetCompletion: For calls that use the V2 REST API the value indicates + % if the request was cancelled or has an error and if so + % error information, in general the success value and result + % (adx.control.models.ErrorResponse) is simpler to work with. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + query string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = false; + options.customRowDecoder function_handle = function_handle.empty + options.useParallel (1,1) logical = false + options.parallelThreshold (1,1) int32 = 1000; + options.verbose (1,1) logical = false; + end + + if isfield(options, "propertyNames") && isfield(options, "propertyValues") + if numel(options.propertyNames) ~= numel(options.propertyValues) + error("adx:KQLQuery", "The number of propertyNames and propertyValues must match"); + else + if options.verbose; fprintf("Applying properties\n"); end + applyProperties = true; + end + else + applyProperties = false; + end + + request = adx.data.models.QueryRequest(); + % Set the query string + request.csl = query; + % Don't set the database use the default in .json config file + if isfield(options, "database") + request.db = options.database; + end + + if applyProperties + crpo = adx.data.models.ClientRequestPropertiesOptions; + for n = 1:numel(options.propertyNames) + if isprop(crpo, options.propertyNames(n)) + try + if options.verbose; fprintf("Setting property: %s\n", options.propertyNames(n)); end + crpo.(options.propertyNames(n)) = options.propertyValues{n}; + catch exception + fprintf("Assignment failure for: %s, property class: %s, value class: %s",... + options.propertyNames(n), class(crpo.(options.propertyNames(n))), class(options.propertyValues{n})); + rethrow(exception); + end + else + error("adx:KQLQuery", "adx.data.models.ClientRequestPropertiesOptions does not have a property named: %s", options.propertyNames(n)); + end + end + crp = adx.data.models.ClientRequestProperties(); + crp.Options = crpo; + request.requestProperties = crp; + end + + % Create the Query object and run the request + args = mathworks.utils.addArgs(options, "bearerToken"); + query = adx.data.api.Query(args{:}); + + args = mathworks.utils.addArgs(options, ["verbose", "cluster"]); + [code, runResult, response, requestId] = query.queryRun(request, args{:}); + + dataSetCompletion = adx.data.models.DataSetCompletion.empty; % Only applies to v2 responses + dataSetHeader = adx.data.models.DataSetHeader.empty; % Only applies to v2 responses + resultTables = {}; + + if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + if options.verbose; fprintf("Converting response to table(s)\n"); end + + args = {"convertDynamics", options.convertDynamics, "nullPolicy", options.nullPolicy, "verbose", options.verbose, "useParallel" options.useParallel, "parallelThreshold", options.parallelThreshold, "allowNullStrings", options.allowNullStrings}; + if isfield(options, "customRowDecoder") + args{end+1} = "customRowDecoder"; + args{end+1} = options.customRowDecoder; + end + + if isa(runResult, "adx.data.models.QueryV1ResponseRaw") + resultTables = {runResult}; + [result, ~] = mathworks.internal.adx.queryV1Response2Tables(runResult, args{:}); + success = true; + elseif isa(runResult, "adx.data.models.QueryV2ResponseRaw") + [result, resultTables, dataSetHeader, dataSetCompletion] = mathworks.internal.adx.queryV2Response2Tables(runResult, args{:}); + success = ~dataSetCompletion.HasErrors && ~dataSetCompletion.Cancelled; + else + fprintf("Expected result of type: adx.data.models.QueryV1ResponseRaw or adx.data.models.QueryV2ResponseRaw, received & returning: %s\n", class(runResult)); + result = runResult; + success = false; % This is likely a problem so fail for now + end + elseif isa(runResult, 'adx.control.models.ErrorResponse') + result = runResult; + if isprop(result, 'error') && isprop(result.error, 'message') + fprintf('Error:\n Code: %s\n Query: %s\n Message: %s\n', code, request.csl, result.error.message); + else + fprintf('Error:\n Code: %s\n Query: %s\n', code, request.csl); + end + success = false; + else + result = adx.control.models.ErrorResponse.empty; + fprintf('Unexpected error:\n Code: %s\n Query: %s\n', code, request.csl); + disp(" Response:"); + disp(response); + success = false; + end + + if options.verbose && ~success; fprintf("Returning success: false\n"); end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/NullPolicy.m b/Software/MATLAB/app/system/+mathworks/+adx/NullPolicy.m new file mode 100644 index 0000000..083d59e --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/NullPolicy.m @@ -0,0 +1,24 @@ +classdef NullPolicy + % NullPolicy Enumeration used to determine how null values ard handled in MATLAB + % + % Values: + % ErrorAny: Error if any null values are detected + % ErrorLogicalInt32Int64: Error if null values are detected for logicals, + % int32s or int64s that do not support missing or NaN + % AllowAll: All null types to map to missing, NaN or NaT for + % all data types + % Convert2Double: Convert logicals, int32s, & int64s to doubles + + % (c) 2024 MathWorks Inc. + + enumeration + % Error if any null values are detected + ErrorAny + % Error if null values are detected for logicals, int32s or int64s that do not support missing or NaN + ErrorLogicalInt32Int64 + % All null types to map to missing, NaN or NaT for all data types + AllowAll + % Convert logicals, int32s, & int64s to doubles + Convert2Double + end +end %class \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/adxRoot.m b/Software/MATLAB/app/system/+mathworks/+adx/adxRoot.m new file mode 100644 index 0000000..93c95c3 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/adxRoot.m @@ -0,0 +1,34 @@ +function rootStr = adxRoot(varargin) + % adxRoot Function to return the root folder for the ADX interface + % + % ADXRoot alone will return the root for the MATLAB code in the + % project. + % + % ADXRoot with additional arguments will add these to the path + % + % funDir = mathworks.adx.adxRoot('app', 'functions') + % + % The special argument of a negative number will move up folders, e.g. + % the following call will move up two folders, and then into + % Documentation. + % + % docDir = mathworks.adx.adxRoot(-2, 'Documentation') + + % Copyright 2022-2023 The MathWorks, Inc. + + rootStr = fileparts(fileparts(fileparts(fileparts(fileparts(mfilename('fullpath')))))); + + for k=1:nargin + arg = varargin{k}; + if isstring(arg) || ischar(arg) + rootStr = fullfile(rootStr, arg); + elseif isnumeric(arg) && arg < 0 + for levels = 1:abs(arg) + rootStr = fileparts(rootStr); + end + else + error('ADX:adxRoot_bad_argument', ... + 'Bad argument for adxRoot'); + end + end +end %function diff --git a/Software/MATLAB/app/system/+mathworks/+adx/clustersGet.m b/Software/MATLAB/app/system/+mathworks/+adx/clustersGet.m new file mode 100644 index 0000000..009b331 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/clustersGet.m @@ -0,0 +1,66 @@ +function result = clustersGet(options) + % clustersGet Returns a Cluster object for a given or default Cluster URL + % In the case of error a adx.control.models.ErrorResponse is returned + % or an error is thrown. + % + % Example: + % % Get a cluster Object for the current default cluster + % result = mathworks.adx.clustersGet(); + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.resourceGroup string {mustBeTextScalar, mustBeNonzeroLengthText} + options.subscriptionId string {mustBeTextScalar, mustBeNonzeroLengthText} + options.apiVersion string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + % Create a Clusters object and get default values from it + c = adx.control.api.Clusters; + + if isfield(options, 'resourceGroup') + resourceGroup = options.resourceGroup; + else + resourceGroup = c.resourceGroup; + end + + if isfield(options, 'subscriptionId') + subscriptionId = options.subscriptionId; + else + subscriptionId = c.subscriptionId; + end + + if isfield(options, 'apiVersion') + apiVersion = options.apiVersion; + else + apiVersion = c.apiVersion; + end + + if isfield(options, 'cluster') + clusterName = options.cluster; + else + clusterName = mathworks.internal.adx.getDefaultConfigValue('cluster'); + end + + if startsWith(clusterName, "https://") + clusterUri = matlab.net.URI(clusterName); + clusterName = clusterUri.Host; + end + fields = split(clusterName, '.'); + clusterName = fields(1); + + [code, result, response] = c.clustersGet(resourceGroup, clusterName, subscriptionId, apiVersion); + + if code == matlab.net.http.StatusCode.OK + if ~isa(result, 'adx.control.models.Cluster') + warning("adx:clustersGet", "Expected cluster to be of type adx.control.models.Cluster, not: %s", class(result)); + end + else + if isa(result, 'adx.control.models.ErrorResponse') + mathworks.internal.adx.dispErrorResponse(result); + else + error("adx:clustersGet", "Error getting cluster: %s, %s", clusterName, response.StatusCode); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/createTable.m b/Software/MATLAB/app/system/+mathworks/+adx/createTable.m new file mode 100644 index 0000000..e72e068 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/createTable.m @@ -0,0 +1,174 @@ +function [tf, result] = createTable(matlabTable, tableName, options) + % createTable Creates a table in a given database + % The contents of the table are not ingested, only the schema + % + % Require arguments: + % matlabTable : The matlabTable to base Kusto table upon. Type table. + % The table need not have content only columns of the + % correct types. + % tableName : The name of the table to create. Type string. + % + % Optional arguments: + % tableProperties : Key value properties for the table, Type containers.Map. + % database : Non default database name. Type string. + % cluster : Non default cluster name. Type string. + % bearerToken : Non default token value. Type string. + % + % Returns a logical true and a table describing the created table or a + % logical false and a adx.control.models.ErrorResponse or an empty MATLAB Table. + % + % Example: + % + % % Create a sample table T + % LastName = ["Sanchez";"Johnson";"Li"]; + % Age = [int32(38); int32(43); int32(38)]; + % Height = [int64(71); int64(69); int64(64)]; + % Weight = [176; 163; 131]; + % T = table(LastName,Age,Height,Weight); + % [tf, result] = mathworks.adx.createTable(T, "health") + % + % tf = + % logical + % 1 + % result = + % 1x5 table + % + % TableName Schema DatabaseName Folder DocString + % _________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ____________ _________ _________ + % "health" "{"Name":"health","OrderedColumns":[{"Name":"LastName","Type":"System.String","CslType":"string"},{"Name":"Age","Type":"System.Int32","CslType":"int"},{"Name":"Height","Type":"System.Int64","CslType":"long"},{"Name":"Weight","Type":"System.Double","CslType":"real"}]}" "testdb1" + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/create-table-command + + % TODO generate adx.control.models.ErrorResponse rather than return empty MATLAB tables + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + matlabTable table {mustBeNonempty} + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + options.tableProperties containers.Map + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.verbose (1,1) logical = false + end + + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster"]); + managementClient = adx.data.api.Management(args{:}); + + if isfield(options, 'database') + database = options.database; + else + database = managementClient.database; + end + + % If the table exists just return + if mathworks.adx.tableExists(tableName, database=database, cluster=managementClient.cluster) + fprintf("Not creating table, table: %s already exists in database: %s\n", tableName, database); + tf = false; + result = table.empty; + return; + end + + % Don't rely on automatic string conversion for now + if ~validateColumnTypes(matlabTable) + fprintf("Not creating table, datatype conversion not possible\n"); + tf = false; + result = table.empty; + return; + end + + mapStr = createTableMapping(matlabTable); + + cmdString = ".create table " + tableName + "(" + mapStr + ")"; + + if isfield(options, 'tableProperties') + if length(options.tableProperties) > 0 %#ok + cmKeys = keys(options.tableProperties); + cmValues = values(options.tableProperties); + cmdString = cmdString + " with("; + for n = 1:length(options.tableProperties) + cmdString = cmdString + cmKeys{n} + "=" + cmValues{n}; + if n < length(options.tableProperties) + cmdString = cmdString + ", "; + end + end + cmdString = cmdString + ")"; + end + end + + req = adx.data.models.ManagementRequest('db', database, 'csl', cmdString); + + [code, runResult, response] = managementClient.managementRun(req); %#ok<*ASGLU> + + tf = false; %#ok % assume failure + if code == matlab.net.http.StatusCode.OK + if isa(runResult, 'adx.data.models.QueryV1ResponseRaw') + result = mathworks.internal.adx.queryV1Response2Tables(runResult, allowNullStrings=true); + if ~istable(result) + fprintf("Unexpected non-tabular result returned for database: %s, table: %s, command:\n%s\n\n", database, tableName, cmdString); + tf = false; % Something is probably wrong, fail + else + tf = true; + end + elseif isa(runResult, 'adx.control.models.ErrorResponse') + if options.verbose; fprintf("createTable failed for database: %s, table: %s, command:\n%s\n\n", database, tableName, cmdString); end + result = runResult; + tf = false; + else + error("adx:createTable", "Unexpected return type: %s", class(runResult)); + end + else + if isa(runResult, 'adx.control.models.ErrorResponse') + if options.verbose; fprintf("createTable failed for database: %s, table: %s, command:\n%s\n\n", database, tableName, cmdString); end + result = runResult; + tf = false; + else + error("adx:createTable", "Unexpected return type: %s", class(runResult)); + end + end +end + + +function tf = validateColumnTypes(T) + % validateColumnTypes Returns true if all datatype can be handled + + arguments + T table {mustBeNonempty} + end + + mNames = T.Properties.VariableNames; + mTypes = varfun(@class,T,'OutputFormat','cell'); + + supportedTypes = ["int32", "int64", "string", "double", "datetime", "duration", "logical"]; + + tf = true; + for n = 1:numel(mTypes) + if ~any(contains(supportedTypes, mTypes{n})) + fprintf("Table column: %s is of type: %s, this is not a support type for conversion\n", mNames{n}, mTypes{n}); + end + end +end + + +function mapStr = createTableMapping(T) + % createTableMapping create table name and type string + % Form: + % Region:string, OutageTime:datetime, Loss:double, Customers:double, RestorationTime:datetime, Cause:string + + arguments + T table {mustBeNonempty} + end + + mNames = T.Properties.VariableNames; + mTypes = varfun(@class,T,'OutputFormat','cell'); + + mapStr = ""; + for n = 1:numel(mTypes) + kType = string(mathworks.internal.adx.mapTypesMATLABToKusto(mTypes{n})); + mapStr = mapStr + string(mNames{n}) + ":" + kType; + if n < numel(mTypes) + mapStr = mapStr + ", "; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/dropTable.m b/Software/MATLAB/app/system/+mathworks/+adx/dropTable.m new file mode 100644 index 0000000..592d2ec --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/dropTable.m @@ -0,0 +1,92 @@ +function result = dropTable(tableName, options) + % dropTable Drops a table from a given database + % + % The .drop table command only soft deletes the data. + % Data can't be queried, but is still recoverable from persistent storage. + % The underlying storage artifacts are hard-deleted according to the + % recoverability property in the retention policy that was in effect at + % the time the data was ingested into the table. + % + % Require argument: + % tableName : The name of the table to drop. Type string. + % + % Optional arguments: + % ifExists : If specified and if true the command won't fail if the table + % doesn't exist. Type logical. + % database : Non default database name. Type string. + % cluster : Non default cluster name. Type string. + % bearerToken : Non default token value. Type string. + % + % Returns a table of remaining tables and some properties or an + % adx.control.models.ErrorResponse. + % + % Example: + % + % result = mathworks.adx.dropTable("TestTable") + % result = + % 5×4 table + % TableName DatabaseName Folder DocString + % _________________ ____________ _________ _________ + % "airlinesmall" "testdb1" + % "airlinesmallcsv" "testdb1" + % "itable" "testdb1" + % "myparquet" "testdb1" + % "outagesTable" "testdb1" + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/drop-table-command + + % Copyright 2023 The MathWorks, Inc. + + arguments + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + options.ifExists logical + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.verbose (1,1) logical = false + end + + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster"]); + managementClient = adx.data.api.Management(args{:}); + + if isfield(options, 'database') + database = options.database; + else + database = managementClient.database; + end + + cmdString = ".drop table " + tableName; + + if isfield(options, 'ifExists') + if options.ifExists + cmdString = cmdString + " ifexists"; + end + end + + req = adx.data.models.ManagementRequest('db' ,database, 'csl', cmdString); + + [code, runResult, response] = managementClient.managementRun(req); %#ok<*ASGLU> + + if code == matlab.net.http.StatusCode.OK + if isa(runResult, 'adx.data.models.QueryV1ResponseRaw') + if nargout > 0 + result = mathworks.internal.adx.queryV1Response2Tables(runResult, allowNullStrings=true); + if ~istable(result) + warning("adx:dropTable", "Unexpected nontabluar result returned"); + end + end + elseif isa(runResult, 'adx.control.models.ErrorResponse') + if options.verbose; fprintf("dropTable failed for: %s\n", tableName); end + result = runResult; + else + error("adx:dropTable", "Unexpected return type: %s", class(runResult)); + end + else + if isa(runResult, 'adx.control.models.ErrorResponse') + if options.verbose; fprintf("dropTable failed for: %s\n", tableName); end + result = runResult; + else + error("adx:dropTable", "Unexpected return type: %s", class(runResult)); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/exportToBlob.m b/Software/MATLAB/app/system/+mathworks/+adx/exportToBlob.m new file mode 100644 index 0000000..376242d --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/exportToBlob.m @@ -0,0 +1,113 @@ +function [tf, result] = exportToBlob(storageConnectionString, query, options) + % exportToBlob Exports data to an Azure blob + % + % Required arguments + % storageConnectionString: SAS URL for the destination blob + % + % query: The result of the query is written to a blob. + % + % Optional arguments + % compressed: Logical to indicate if the results should be compressed, default is true + % + % outputDataFormat: String to indicate the output file format the default is parquet + % Supported values are: csv, tsv, json, and parquet. + % + % database: Database name string, the default is taken from the JSON settings file. + % + % cluster: Cluster name string, the default is taken from the JSON settings file. + % + % bearerToken: String containing a specific bearerToken + % + % Return values + % tf: Logical to indicate if the command succeeded. + % + % Result: On success contains the result of the query on failure contains a + % adx.control.models.ErrorResponse + % + % Example: + % exportURL = "https://.blob.core.windows.net/"; + % exportURI = matlab.net.URI(exportURL); + % SAS = exportURI.EncodedQuery; + % query = "table('" + "mytablename" + "', 'all')"; + % [tf, result] = mathworks.adx.exportToBlob(exportURI.EncodedURI, query); + % % Assuming tf == true + % downloadURL = result.Path(1) + "?" + SAS; + % downloadURI = matlab.net.URI(downloadURL); + % % The default export format is parquet + % localFile = websave("exportedTable.gz.parquet", downloadURI); + % T = parquetread(localFile); + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-export/export-data-to-storage + + % Copyright 2023 The MathWorks, Inc. + + arguments + storageConnectionString string {mustBeNonzeroLengthText} + query string {mustBeTextScalar, mustBeNonzeroLengthText} + options.compressed logical = true + options.async logical = false + options.outputDataFormat string {mustBeTextScalar, mustBeNonzeroLengthText} = "parquet" + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.exportProperties containers.Map + end + + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster"]); + managementClient = adx.data.api.Management(args{:}); + + if isfield(options, 'database') + database = options.database; + else + database = managementClient.database; + end + + cmdString = ".export"; + + if options.async + cmdString = cmdString + " async"; + end + + if options.compressed + cmdString = cmdString + " compressed"; + end + + cmdString = cmdString + " to " + options.outputDataFormat; + + cmdString = cmdString + "(" + """" + storageConnectionString + """" + ")"; + + if isfield(options, 'exportProperties') + if length(options.exportProperties) > 0 %#ok + cmKeys = keys(options.exportProperties); + cmValues = values(options.exportProperties); + cmdString = cmdString + " with("; + for n = 1:length(options.exportProperties) + cmdString = cmdString + cmKeys{n} + "=" + cmValues{n}; + if n < length(options.exportProperties) + cmdString = cmdString + ", "; + end + end + cmdString = cmdString + ")"; + end + end + + cmdString = cmdString + " <| " + query; + + req = adx.data.models.ManagementRequest('db', database, 'csl', cmdString); + + [code, result, response] = managementClient.managementRun(req); %#ok<*ASGLU> + + if code == matlab.net.http.StatusCode.OK + cellTabularResult = mathworks.internal.adx.queryV1Response2Tables(result, allowNullStrings=true); + if numel(cellTabularResult) == 1 + result = cellTabularResult{1}; + else + warning("adx:exportToBlob", "More than one result table returned"); + result = cellTabularResult; + end + tf = true; + else + result.disp(); + tf = false; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestFile.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestFile.m new file mode 100644 index 0000000..3ef2188 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestFile.m @@ -0,0 +1,269 @@ +function [success, result] = ingestFile(localFile, tableName, options) + % ingestTableQueue Ingests a local file to Azure Data Explorer using Azure blob + % + % Arguments: + % localFile: Path to file to be ingested. + % + % tableName: Table to ingest the data to. + % + % Optional arguments: + % database: database name, if not specified the database configured in + % the json settings file will be used. + % + % format: Format of the file to be ingested, if not specified the file + % extension will be used. + % + % blobName: Name of the blob to upload to, if not specified a name will be + % generated based on the local file. + % + % cluster: Cluster name, if not specified the database configured in + % the json settings file will be used. + % + % bearerToken: Bearer Token, if not specified the database configured in + % the json settings file will be used. + % + % mode: "drop" drop the existing table if it exists before ingesting + % "create" create the table if it does not exist + % "add" (Default) ingest into an existing table + % + % Return values: + % success: A logical true is returned if a success message is returned. + % + % result: Tabular output of the command if successful otherwise a + % adx.control.models.ErrorResponse + % + % Example: + % % Get filename & path for the outages.parquet file + % info = parquetinfo('outages.parquet'); + % success = mathworks.adx.ingestFile(info.Filename, 'outagesTable'); + % + % + % Table Exists + % ----------------------------------------------------- + % | True | False + % ----------------------------------------------------- + % Mode | | + % create | add | create, add + % drop | drop, create, add | create add + % add (default) | add | error + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + localFile string {mustBeTextScalar} + tableName string {mustBeTextScalar} + options.database string {mustBeTextScalar} + options.format string {mustBeTextScalar} + options.blobName string {mustBeTextScalar} + options.cluster string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar} + options.mode string {mustBeMember(options.mode, ["drop","create","add"])} = "add" + options.verbose (1,1) logical = true + options.uploadViaAzureServices logical = true % For debug use only + end + + if options.verbose; fprintf('Starting file ingestion: %s\n', localFile); end + + if ~isfile(localFile) + fprintf("File not found: %s\n", localFile); + success = false; + result = table.empty; + return; + end + + if isfield(options, 'blobName') + blobName = options.blobName; + else + [~, name, ext] = fileparts(localFile); + blobName = strcat(name, ext); + blobName = mathworks.internal.blob.sanitizeBlobName(blobName); + end + + if isfield(options, 'database') + database = options.database; + else + database = mathworks.internal.adx.getDefaultConfigValue('database'); + end + if ~strlength(database) > 0 + fprintf("database value not set\n"); + success = false; + result = table.empty; + return; + end + + if isfield(options, 'cluster') + cluster = options.cluster; + else + cluster = mathworks.internal.adx.getDefaultConfigValue('cluster'); + end + if ~strlength(cluster) > 0 + fprintf("cluster value not set\n"); + success = false; + result = table.empty; + return; + end + + if options.verbose; fprintf("Checking for existence of table: %s\n", tableName); end + tableExists = mathworks.adx.tableExists(tableName, database=database, cluster=cluster); + if options.verbose + if tableExists + disp("Table found"); + else + disp("Table not found"); + end + end + + args = mathworks.utils.addArgs(options, ["uploadViaAzureServices", "bearerToken", "format"]); + switch options.mode + case "add" + if tableExists + [success, result] = doIngest(localFile, cluster, database, tableName, blobName, options.verbose, args{:}); + else + fprintf("Table not found: %s, see: mathworks.adx.createTable or the mode argument to create the table prior to ingestion\n", tableName); + success = false; + result = table.empty; + end + case "drop" + if tableExists + if options.verbose; disp("Dropping table"); end + dropResult = mathworks.adx.dropTable(tableName, database=database, cluster=cluster); + if ~istable(dropResult) + fprintf("dropTable failed for: %s\n", tableName); + success = false; + result = table.empty; + return; + end + end + if options.verbose; disp("Creating table"); end + mTable = parquetread(localFile); + if ~mathworks.adx.createTable(mTable, tableName, database=database, cluster=cluster) + fprintf("Table creation failed: %s\n", tableName); + success = false; + result = table.empty; + else + clear("mTable"); + [success, result] = doIngest(localFile, cluster, database, tableName, blobName, options.verbose, args{:}); + end + case "create" + if ~tableExists + if options.verbose; disp("Creating table"); end + mTable = parquetread(localFile); + if ~mathworks.adx.createTable(mTable, tableName, database=database, cluster=cluster) + fprintf("Table creation failed: %s\n", tableName); + success= false; + result = table.empty; + return; + end + clear("mTable"); + end + [success, result] = doIngest(localFile, cluster, database, tableName, blobName, options.verbose, args{:}); + otherwise + error("adx:ingestFile", "Unexpected mode value: %s", options.mode); + end +end + + +function [tf, result] = doIngest(localFile, cluster, database, tableName, blobName, verbose, options) + arguments + localFile string {mustBeTextScalar} + cluster string {mustBeTextScalar} + database string {mustBeTextScalar} + tableName string {mustBeTextScalar} + blobName string {mustBeTextScalar} + verbose (1,1) logical = true + options.format string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar} + options.uploadViaAzureServices logical = true % For debug use only + end + + if verbose; disp("Ingesting table"); end + + % TODO add link to supported formats + if ~isfield(options, 'format') + [~, ~, ext] = fileparts(localFile); + if strlength(ext) > 0 + if startsWith(ext, ".") + format = extractAfter(ext, "."); + else + format = ext; + end + if ~strcmpi(format, 'parquet') + warning("adx:ingestFile", "Format type not yet validated: %s", format) + end + else + error("adx:ingestFile", "Format cannot be determined from filename: %s", localFile) + end + else + format = options.format; + end + if ~strlength(format) > 0 + error("adx:ingestFile", "format value not set") + end + + if verbose; disp('Getting dataBearerToken'); end + if isfield(options, 'bearerToken') && strlength(options.bearerToken) > 0 + bearerToken = options.dataBearerToken; + else + q = adx.data.api.Query; + if strlength(q.dataBearerToken) > 0 + bearerToken = q.dataBearerToken; + else + bearerToken = mathworks.internal.adx.getDataBearerToken(database, cluster); + end + end + + if ~strlength(bearerToken) > 0 + error("adx:ingestFile", "dataBearerToken value not set") + end + + if verbose; disp('Getting ingestion resources'); end + ingestionResources = mathworks.internal.adx.getIngestionResources('bearerToken', bearerToken, 'cluster', cluster); + + % Upload file to one of the blob containers we got from Azure Data Explorer. + % This example uses the first one, but when working with multiple blobs, + % one should round-robin the containers in order to prevent throttling + if verbose; disp('Uploading to blob'); end + if options.uploadViaAzureServices + [blobUriWithSas, ~] = mathworks.internal.blob.clientUploadToBlobContainer(ingestionResources, blobName, localFile); + else + % Use copyfile for write issue debug only - see g3200984, failure is expected + [blobUriWithSas, ~] = mathworks.internal.blob.clientCopyToBlobContainer(ingestionResources, blobName, localFile); + end + + if verbose; disp('Direct Ingest From Storage'); end + [tf, result] = ingestFromStorage(blobUriWithSas, database, tableName, format, 'cluster', cluster, 'bearerToken', bearerToken); +end + + +function [tf, result] = ingestFromStorage(blobUriWithSas, database, tableName, format, options) + % ingestFromStorage Ingestion direct from a blob + arguments + blobUriWithSas string {mustBeTextScalar, mustBeNonzeroLengthText} + database string {mustBeTextScalar, mustBeNonzeroLengthText} + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + format string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster"]); + managementClient = adx.data.api.Management(args{:}); + + cmdStr = sprintf(".ingest into table %s ('%s') with (format='%s')", tableName, blobUriWithSas, format); + + req = adx.data.models.ManagementRequest('db' ,database, 'csl', cmdStr); + + [code, mrResult, response] = managementClient.managementRun(req);%#ok<*ASGLU> + + if code == matlab.net.http.StatusCode.OK + tf = true; + result = mathworks.internal.adx.queryV1Response2Tables(mrResult, allowNullStrings=true); + else + if isa(mrResult, 'adx.control.models.ErrorResponse') + mrResult.disp(); + end + warning("adx:ingestFile:ingestFromStorage", "Error ingesting from blob storage") + tf = false; + result = table.empty; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestFileQueue.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestFileQueue.m new file mode 100644 index 0000000..7e67724 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestFileQueue.m @@ -0,0 +1,351 @@ +function success = ingestFileQueue(localFile, options) + % INGESTSINGLEFILE Ingests a local file to Azure Data Explorer using Azure blob & queue + % + % Arguments: + % localFile: Path to file to be ingested. + % + % Optional named arguments: + % database: database name, if not specified the database configured in + % the JSON settings file will be used. + % format: Format of the file to be ingested, if not specified the file + % extension will be used. + % blobName: Name of the blob to upload to, if not specified a name will be + % generated based on the local file. + % cluster: Cluster name, if not specified the database configured in + % the JSON settings file will be used. + % bearerToken: Bearer Token, if not specified the database configured in + % the JSON settings file will be used. + % tableName: Table to ingest the data to, default is ingestedTable- + % + % Return values + % success: A logical true is returned if a success message is returned. + % + % Example: + % % Get filename & path for the outages.parquet file + % info = parquetinfo('outages.parquet'); + % success = mathworks.adx.ingestFileQueue(info.Filename, 'tableName', 'outagesTable') + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + % TODO remove default localFile post testing + localFile string {mustBeTextScalar} % DEBUG ONLY= '/usr/local/MATLAB/R2022b/toolbox/matlab/demos/outages.parquet' + options.database string {mustBeTextScalar} + options.format string {mustBeTextScalar} + options.blobName string {mustBeTextScalar} + options.cluster string {mustBeTextScalar} + options.bearerToken string {mustBeTextScalar} + options.tableName string {mustBeTextScalar} = "ingestedTable-" + string(datetime('now', 'Format', 'uuuuMMdd''T''HHmmss', 'TimeZone', 'UTC')) + end + + disp([newline, "Warning: ingestFileQueue is still under development and should not be used at this time!", newline]); + + disp(['Starting file ingestion: ', char(localFile)]); + if ~isfile(localFile) + error("adx:IngestSingleFile", "File not found: %s", localFile) + end + + if isfield(options, 'blobName') + blobName = options.blobName; + else + [~, name, ext] = fileparts(localFile); + blobName = strcat(name, ext); + blobName = sanitizeBlobName(blobName); + end + + if isfield(options, 'database') + database = options.database; + else + % Create a client to get the default database name + % the client is not used. + managementClient = adx.data.api.Management(); + database = managementClient.database; + end + + % TODO add link to supported formats + if ~isfield(options, 'format') + [~, ~, ext] = fileparts(localFile); + if strlength(ext) > 0 + if startsWith(ext,".") + format = extractAfter(ext, "."); + else + format = ext; + end + if ~strcmpi(format, 'parquet') + warning("adx:IngestSingleFile", "Format type not yet validated: %s", format) + end + else + error("adx:IngestSingleFile", "Format cannot be determined from filename: %s", localFile) + end + else + format = options.format; + end + + disp('Getting bearerToken'); + if ~isfield(options, 'dataBearerToken') || strlength(options.dataBearerToken) == 0 + options.bearerToken = getDataBearerToken(database, cluster); + end + + % Configure arguments + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster"]); + disp('Retrieving ingestion resources'); + ingestionResources = retrieveIngestionResources(args{:}); + disp('Retrieving Kusto identity token'); + identityToken = retrieveKustoIdentityToken(args{:}); + + % Upload file to one of the blob containers we got from Azure Data Explorer. + % This example uses the first one, but when working with multiple blobs, + % one should round-robin the containers in order to prevent throttling + disp('Uploading to blob'); + [blobUriWithSas, blobSize] = UploadFileToBlobContainer(ingestionResources, blobName, localFile); + + disp('Composing ingestion command'); + if ~isfield(identityToken, 'token') + error("adx:IngestSingleFile", "Identity token not found") + else + ingestionMessage = prepareIngestionMessage(blobUriWithSas, blobSize, format, identityToken.token, database, options.tableName); + end + + disp('Posting ingestion command to queue'); + % Post ingestion command to one of the previously obtained ingestion queues. + % This example uses the first one, but when working with multiple blobs, + % one should round-robin the queues in order to prevent throttling + if ~isfield(ingestionResources, 'SecuredReadyForAggregationQueue') + error("adx:IngestSingleFile", "SecuredReadyForAggregationQueue name not found") + else + % TODO consider load balancing + sendMessageResult = postMessageToQueue(matlab.net.URI(ingestionResources.SecuredReadyForAggregationQueue(1)), ingestionMessage); %#ok + end + + wait = 20; % TODO consider how to handle this robustly + fprintf('Waiting for %ds...\n', wait); + countDown(wait); + + disp("Read success notifications"); + if ~isfield(ingestionResources, 'SuccessfulIngestionsQueue') + error("adx:IngestSingleFile", "SuccessfulIngestionsQueue name not found") + else + % TODO consider load balancing + successes = PopTopMessagesFromQueue(matlab.net.URI(ingestionResources.SuccessfulIngestionsQueue(1)), 32); + end + + if isempty(successes) + successesTf = false; + else + successesTf = true; + for n = 1:numel(successes) + fprintf('Ingestion complete: %s\n', successes(n)); + end + end + + disp('Read failure notifications'); + if ~isfield(ingestionResources, 'FailedIngestionsQueue') + error("adx:IngestSingleFile", "FailedIngestionsQueue name not found") + else + errors = PopTopMessagesFromQueue(matlab.net.URI(ingestionResources.FailedIngestionsQueue(1)), 32); + end + if isempty(errors) + failedTf = false; + else + failedTf = false; + for n = 1:numel(errors) + fprintf('Ingest error: %s\n', errors(n)); + end + end + + if ~successesTf && ~failedTf + fprintf('Ingest error, neither success or failure detected\n'); + end + + success = successesTf; +end + + +function countDown(wait) + % countDown displays a countDown of wait seconds + arguments + wait int32 {mustBeNonnegative, mustBeReal} + end + + for n = 1:wait + fprintf("%d ", wait - n + 1); + pause(1); + if mod(n, wait) == 0 && n ~= wait + fprintf("\n"); + end + end + fprintf("\n"); +end + + +function bearerToken = getBearerToken(database, cluster) + % getBearerToken Gets a bearer token by forcing a query + arguments + database string {mustBeTextScalar, mustBeNonzeroLengthText} + cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + req = adx.data.models.QueryRequest('db', database, 'csl', 'print Test="Hello, World!"'); + q = adx.data.api.Query('cluster', cluster); + [code, result, response] = q.queryRun(req); %#ok<*ASGLU> + + if code ~= matlab.net.http.StatusCode.OK + error("adx:IngestSingleFile:getBearerToken", "Error getting bearer token"); + else + bearerToken = q.bearerToken; + end +end + + +function result = sanitizeBlobName(blobName) + % sanitizeBlobName Checks that a name complies with Blob name limits + arguments + blobName string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + % TODO apply blob name restrictions + % blobName = lower(matlab.lang.makeValidName(['adxingesttemporaryblob',char(datetime('now'))],'ReplacementStyle','delete')); + result = blobName; +end + + +function messages = PopTopMessagesFromQueue(queueUriWithSas, count) + % PopTopMessagesFromQueue Returns count messages from a given queue + arguments + queueUriWithSas (1,1) matlab.net.URI + count (1,1) int32 {mustBePositive} + end + + endPoint = strcat(queueUriWithSas.Scheme, "://", queueUriWithSas.EncodedAuthority, queueUriWithSas.EncodedPath); + sasToken = queueUriWithSas.EncodedQuery; + qClient = createStorageClient('QueueName', queueUriWithSas.Path(end), 'SASToken', sasToken, 'EndPoint', endPoint); + messagesFromQueue = qClient.receiveMessages('maxMessages', count); + messages = string.empty; + for n = 1:numel(messagesFromQueue) + messages(end+1) = messagesFromQueue(n).getMessageText; %#ok + end +end + + +function sendMessageResult = postMessageToQueue(queueURI, message) + % postMessageToQueue + arguments + queueURI (1,1) matlab.net.URI + message string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + endPoint = strcat(queueURI.Scheme, "://", queueURI.EncodedAuthority, queueURI.EncodedPath); + sasToken = queueURI.EncodedQuery; + qClient = createStorageClient('QueueName',queueURI.Path(end), 'SASToken', sasToken, 'EndPoint', endPoint); + sendMessageResult = qClient.sendMessage(message); +end + + +function [blobUriWithSas, blobSize] = UploadFileToBlobContainer(ingestionResources, blobName, localFile) + % UploadFileToBlobContainer Uploads a file to a blob for ingestion + arguments + ingestionResources struct + blobName string {mustBeTextScalar, mustBeNonzeroLengthText} + localFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + if ~isfield(ingestionResources, 'TempStorage') + error("adx:IngestSingleFile", "TempStorage name not found") + else + containerURI = matlab.net.URI(ingestionResources.TempStorage(1)); + end + blobContainerClientBuilder = azure.storage.blob.BlobContainerClientBuilder(); + blobContainerClientBuilder.sasToken(containerURI.EncodedQuery); + blobContainerClientBuilder.endpoint(strcat(containerURI.Scheme, "://", containerURI.EncodedAuthority, containerURI.EncodedPath)); + blobContainerClient = blobContainerClientBuilder.buildClient; + blobClient = blobContainerClient.getBlobClient(blobName); + blobClient.uploadFromFile(localFile, 'overwrite', true); + blobProperties = blobClient.getProperties(); + blobSize = blobProperties.getBlobSize(); + blobUriWithSas = strcat(blobClient.getBlobUrl(), "?", containerURI.EncodedQuery); +end + + +function identityToken = retrieveKustoIdentityToken(options) + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {}; + if isfield(options, 'cluster') + args{end+1} = "cluster"; + args{end+1} = options.cluster; + end + if isfield(options, 'bearerToken') + args{end+1} = "bearerToken"; + args{end+1} = options.bearerToken; + end + managementClient = adx.data.api.Management(args{:}); + + [code, result, ~] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get kusto identity token')); + if code == matlab.net.http.StatusCode.OK + identityToken = mathworks.utils.jwt.JWT(result.Tables.Rows{1}); + else + error("adx:IngestSingleFile:retrieveKustoIdentityToken", "Error getting Identity token") + end +end + + +function ingestionMessage = prepareIngestionMessage(blobUriWithSas, blobSize, format, identityToken, database, tableName) + % prepareIngestionMessage Creates a JSON message to describe the ingestion + arguments + blobUriWithSas string {mustBeTextScalar, mustBeNonzeroLengthText} + blobSize (1,1) int64 + format string {mustBeTextScalar, mustBeNonzeroLengthText} + identityToken string {mustBeTextScalar, mustBeNonzeroLengthText} + database string {mustBeTextScalar, mustBeNonzeroLengthText} + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + queueIngestionMessage = adx.data.models.QueueIngestionMessage; + queueIngestionMessage.Id = mathworks.utils.UUID; + queueIngestionMessage.BlobPath = blobUriWithSas; + queueIngestionMessage.RawDataSize = blobSize; + queueIngestionMessage.TableName = tableName; + queueIngestionMessage.DatabaseName = database; + % TODO expose as an option + queueIngestionMessage.RetainBlobOnSuccess = true; % Do not delete the blob on success + queueIngestionMessage.FlushImmediately = true; % Do not aggregate + queueIngestionMessage.ReportLevel = 2; % Report failures and successes (might incur perf overhead) + queueIngestionMessage.AdditionalProperties("authorizationContext") = identityToken; + % TODO needed for non parquet + % queueIngestionMessage.AdditionalProperties("mappingReference") = "mappingRef?"; + queueIngestionMessage.AdditionalProperties("format") = format; + ingestionMessage = queueIngestionMessage.jsonencode; + if ~strcmpi(format, 'parquet') + warning("IngestSingleFile:prepareIngestionMessage", "prepareIngestionMessage functionality complete for parquet only, not: %s", format); + end +end + + +function irs = retrieveIngestionResources(options) + % retrieveIngestionResources Get queues and other values to do ingestion + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {}; + if isfield(options, 'cluster') + args{end+1} = "cluster"; + args{end+1} = options.cluster; + end + if isfield(options, 'bearerToken') + args{end+1} = "bearerToken"; + args{end+1} = options.bearerToken; + end + managementClient = adx.data.api.Management(args{:}); + + [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources')); + if code == matlab.net.http.StatusCode.OK + irs = adx.data.models.IngestionResourcesSnapshot(result); + % irsTable = irs.table; % TODO enable table conversion + else + error("adx:IngestSingleFile:retrieveIngestionResources", "Error getting Ingestion Resources") + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestFromQuery.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestFromQuery.m new file mode 100644 index 0000000..d71d30f --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestFromQuery.m @@ -0,0 +1,153 @@ +function [success, result, requestId] = ingestFromQuery(command, tableName, queryOrCommand, options) + % ingestFromQuery Ingest data using the result of a command or query + % + % This ingestion method is intended for exploration and prototyping. + % Do not use it in production or high-volume scenarios. + % + % Command If table exists If table doesn't exist + % ------------------------------------------------------------------------------------------- + % set The command fails The table is created and data is ingested + % append Data is appended to the table The command fails + % set-or-append Data is appended to the table The table is created and data is ingested + % set-or-replace Data replaces the data The table is created and data is ingested + % in the table + % + % Arguments + % command One of: set, append, set-or-append or set-or-replace. + % Type scalar text. + % + % tableName Name of the table to ingest into. Type scalar text. + % + % queryOrCommand Command or query to append to produce the dta to ingest. + % Type scalar text. + % + % Optional named arguments + % async Logical to indicate if async mode should be used or not. + % Default is false. + % + % database Non default database name. Type scalar text. + % + % cluster Non default cluster name. Type scalar text. + % + % propertyNames One or more supported ingestion properties used + % to control the ingestion process. + % + % propertyValues Property values that correspond the propertyNames, specified + % as a cell array. + % + % scopes Non default scopes value. Type scalar text. + % + % convertDynamics Logical to determine if dynamic fields are decoded or not. + % Default is true. + % + % nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + % null values are handled in returned results. + % + % allowNullStrings Logical to allow null strings in input. Kusto does not + % store null strings but control command may return them. + % Default is true. + % + % verbose A logical to enable additional output. Default is true. + % + % Return values + % success A logical to indicate if the query succeed or not. + % + % result Table containing the primary result or first table of the + % command response. If the request failed the result will + % be a adx.control.models.ErrorResponse rather than a table. + % + % requestId The request's ID string in ADX. Type scalar string. + % + % extentId The unique identifier for the data shard that was generated + % by the command. Type scalar string. + % + % See also: + % https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query + + % Copyright 2024 The MathWorks, Inc. + + arguments + command string {mustBeMember(command, {'set', 'append', 'set-or-append', 'set-or-replace'})} + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + queryOrCommand string {mustBeTextScalar, mustBeNonzeroLengthText} + options.async (1,1) logical = false + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.scopes string + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = true + options.verbose (1,1) logical = true + end + + args = mathworks.utils.addArgs(options, ["database", "cluster"]); + tableExists = mathworks.adx.tableExists(tableName, args{:}); + + % Exit early if using set with an existing database + if tableExists && strcmp(command, "set") + if options.verbose + fprintf("The table: %s, already exists hence the set command cannot be used\n", tableName); + end + requestId = ""; + success = false; + result = table.empty; + return; + end + + % Exit early if there is no table to append to + if ~tableExists && strcmp(command, "append") + if options.verbose + fprintf("The table: %s, does not exist hence the append command cannot be used\n", tableName); + end + requestId = ""; + success = false; + result = table.empty; + return; + end + + if ~tableExists && (strcmp(command, "set-or-append") || strcmp(command, "set-or-replace")) + if options.verbose + fprintf("The table: %s, does not exist and will be created\n", tableName); + end + end + + if tableExists && strcmp(command, "set-or-replace") + if options.verbose + fprintf("The data in table: %s, will be replaced\n", tableName); + end + end + + commandStr = command + " "; + if options.async + commandStr = commandStr + "async "; + end + commandStr = commandStr + tableName + " "; + + if isfield(options, "propertyNames") && numel(options.propertyNames) > 0 + commandStr = commandStr + " with("; + for n = 1:numel(options.propertyNames) + commandStr = commandStr + options.propertyNames(n) + "="; + if islogical(options.propertyValues{n}) + if options.propertyValues{n} + commandStr = commandStr + "true"; + else + commandStr = commandStr + "false"; + end + else + commandStr = commandStr + options.propertyValues{n}; + end + if n < numel(options.propertyNames) + commandStr = commandStr + ","; + end + end + commandStr = commandStr + ")"; + end + + commandStr = commandStr + " <| " + queryOrCommand; + + args = mathworks.utils.addArgs(options, ["database", "cluster", "scopes", "convertDynamics", "nullPolicy", "allowNullStrings", "verbose"]); + [result, success, requestId] = mathworks.adx.mgtCommand(commandStr, args{:}); +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestInline.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestInline.m new file mode 100644 index 0000000..e31d2b6 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestInline.m @@ -0,0 +1,293 @@ +function [success, result, requestId, extentId] = ingestInline(tableName, ingestData, options) + % ingestInline Ingests limited amounts of data into Kusto directly from MATLAB + % + % This ingestion method is intended for exploration and prototyping. + % Do not use it in production or high-volume scenarios. + % + % The destination table should exist before calling this function. + % + % You must have at least Table Ingestor permissions to run this command. + % + % Arguments + % tableName Name of the table to ingest into. Type scalar text. + % + % ingestData Data to be ingested, must be of formats that are convertible + % to Kusto literals and compatible with the destination table + % schema. Type cell array, table, primitive variable/array. + % + % Optional named arguments + % tableExistsCheck Check if the table exists before proceeding. Type logical, + % default true. + % + % checkSchema Check that the destination schema is compatible with the + % ingest data. Type logical, default true. + % + % database Non default database name. Type scalar text. + % + % cluster Non default cluster name. Type scalar text. + % + % propertyNames One or more supported ingestion properties used + % to control the ingestion process. + % + % propertyValues Property values that correspond the propertyNames, specified + % as a cell array. + % + % scopes Non default scopes value. Type scalar text. + % + % convertDynamics Logical to determine if dynamic fields are decoded or not. + % Default is true. + % + % nullPolicy A mathworks.adx.NullPolicy enumeration to determine how + % null values are handled in returned results. + % + % allowNullStrings Logical to allow null strings in input. Kusto does not + % store null strings but control command may return them. + % Default is true. + % + % verbose A logical to enable additional output. Default is true. + % + % Return values + % success A logical to indicate if the query succeed or not. + % + % result Table containing the primary result or first table of the + % command response. If the request failed the result will + % be a adx.control.models.ErrorResponse rather than a table. + % + % requestId The request's ID string in ADX. Type scalar string. + % + % extentId The unique identifier for the data shard that was generated + % by the command. Type scalar string. + % + % If table existence check and the schema compatibility check fail empty + % result, requestId & extentId values are returned along with a logical false + % success. + % + % While not intended for performance sensitive applications disabling the + % table existence check and the schema compatibility check where appropriate + % using tableExistsCheck and checkSchema respectively. + % + % Example: + % localPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); + % tableName = "outages"; + % ingestData = praquetTable(1,:); + % + % [success, result, requestId, extentId] = mathworks.adx.ingestInline(tableName, ingestData) + % + % success = + % logical + % 1 + % result = + % 1x5 table + % ExtentId ItemLoaded Duration HasErrors OperationId + % ______________________________________ _____________________________________________ ________ _________ ______________________________________ + % "8de6b799-6e12-4994-b57b-ed75e15db0a8" "inproc:a607e293-dbdd-4f79-a1a2-a61982585adf" 00:00:00 false "cd4184ca-0d31-4c42-a273-5f2953f76ddf" + % requestId = + % "63bb1cea-b589-45ac-82ad-00d68ca96aeb" + % extentId = + % "8de6b799-6e12-4994-b57b-ed75e15db0a8" + % + % See also: + % https://learn.microsoft.com/en-us/azure/data-explorer/ingestion-properties + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-inline + + % Copyright 2024 The MathWorks, Inc. + + arguments + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + ingestData + options.tableExistsCheck (1,1) logical = true + options.checkSchema (1,1) logical = true + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.scopes string + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = true + options.verbose (1,1) logical = false + end + + if options.tableExistsCheck + args = mathworks.utils.addArgs(options, ["database", "cluster"]); + tableExists = mathworks.adx.tableExists(tableName, args{:}); + + % Exit early if using set with an existing database + if ~tableExists + fprintf(2, "The table: %s, does not exist and so cannot be used\n", tableName); + requestId = string.empty; + extentId = string.empty; + success = false; + result = table.empty; + return; + end + end + + + if options.checkSchema + args = mathworks.utils.addArgs(options, ["database", "cluster", "verbose"]); + if ~checkDataSchemaMatch(tableName, ingestData, args{:}) + fprintf(2, "The data to be ingested does not match the schema of the destination table, or the schema could not be determined"); + requestId = string.empty; + extentId = string.empty; + success = false; + result = table.empty; + return; + end + end + + commandStr = ".ingest inline into table " + tableName; + + if isfield(options, "propertyNames") && numel(options.propertyNames) > 0 + commandStr = commandStr + " with("; + for n = 1:numel(options.propertyNames) + commandStr = commandStr + options.propertyNames(n) + "="; + if islogical(options.propertyValues{n}) + if options.propertyValues{n} + commandStr = commandStr + "true"; + else + commandStr = commandStr + "false"; + end + else + commandStr = commandStr + options.propertyValues{n}; + end + if n < numel(options.propertyNames) + commandStr = commandStr + ","; + end + end + commandStr = commandStr + ")"; + end + + commandStr = commandStr + " <| " + newline; + + commandStr = commandStr + ingestDataToString(ingestData); + + args = mathworks.utils.addArgs(options, ["database", "cluster", "scopes", "convertDynamics", "nullPolicy", "allowNullStrings", "verbose"]); + [result, mgtCmdSuccess, requestId] = mathworks.adx.mgtCommand(commandStr, args{:}); + if mgtCmdSuccess + if istable(result) && ~isempty(result) && any(matches(result.Properties.VariableNames, "HasErrors")) && islogical(result.("HasErrors")) + success = ~any(result.("HasErrors")); + else + success = false; + fprintf(2, "Unexpected command result or HasErrors value\n"); + end + if istable(result) && ~isempty(result) && any(matches(result.Properties.VariableNames, "ExtentId")) && isStringScalar(result.("ExtentId")) + extentId = result.("ExtentId"); + else + extentId = string.empty; + fprintf(2, "Unexpected command result or ExtentId value\n"); + end + else + success = false; + extentId = string.empty; + end +end + + +function str = ingestDataToString(data) + % ingestDataToString Convert MATLAB data to CSV format literals + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types + arguments + data + end + + str = ""; + for n = 1:height(data) + row = ""; + for m = 1:width(data) + if iscell(data) || istable(data) + row = row + mathworks.internal.adx.toKustoLiteral(data{n,m}); + else + row = row + mathworks.internal.adx.toKustoLiteral(data(n,m)); + end + if m ~= width(data) + row = row + ", "; + end + end + if n ~= height(data) + str = str + row + newline; + else + str = str + row; + end + end +end + + +function tf = checkDataSchemaMatch(tableName, ingestData, options) + arguments + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + ingestData + options.verbose (1,1) logical = true + options.allowDynamic (1,1) logical = true + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {"JSONFormat", false, "verbose", false}; + args = mathworks.utils.addArgs(options, ["database", "cluster"], args); + [kustoSchema, success, requestId] = mathworks.internal.adx.getTableSchema(tableName, args{:}); + + if ~success + fprintf(2, "Failed to get schema for table: %s, requestId: %s", tableName, requestId); + tf = false; + return; + end + + [kustoColumnNames, kustoTypes] = mathworks.internal.adx.kustoSchemaToNamesAndTypes(kustoSchema, JSONFormat=false, verbose=options.verbose); + + if istable(ingestData) + matlabTypes = varfun(@class, ingestData, 'OutputFormat', 'cell'); + if iscellstr(matlabTypes) %#ok + matlabTypes = string(matlabTypes); + else + error("adx:ingestInline:checkDataSchemaMatch", "Expected MATLAB table types to be a cell array of character vectors"); + end + tf = isMATLABDataConvertible(matlabTypes, kustoTypes, columnNames=kustoColumnNames, allowDynamic=options.allowDynamic, verbose=options.verbose); + elseif iscell(ingestData) + matlabTypes = ""; + for n = 1:width(ingestData) + matlabTypes(end+1) = string(class(ingestData{n})); %#ok + end + tf = isMATLABDataConvertible(matlabTypes, kustoTypes, columnNames=kustoColumnNames, allowDynamic=options.allowDynamic, verbose=options.verbose); + else + typeStr = string(class(ingestData)); + for n = 1:width(ingestData) + matlabTypes(end+1) = typeStr; %#ok + end + tf = isMATLABDataConvertible(matlabTypes, kustoTypes, columnNames=kustoColumnNames, allowDynamic=options.allowDynamic, verbose=options.verbose); + end +end + + +function tf = isMATLABDataConvertible(matlabTypes, kustoTypes, options) + arguments + matlabTypes string {mustBeNonzeroLengthText} + kustoTypes string {mustBeNonzeroLengthText} + options.columnNames string {mustBeNonzeroLengthText} + options.allowDynamic (1,1) logical = true + options.verbose (1,1) logical = true + end + + if numel(kustoTypes) ~= numel(matlabTypes) + error("adx:ingestInline:isMATLABDataConvertible", "The width of the MATLAB table: %d, does not match that of the Kusto table: %d", numel(matlabTypes), numel(kustoSchema)); + end + + tf = true; + for n = 1:numel(kustoTypes) + if ~mathworks.internal.adx.isMappableMATLABToKusto(matlabTypes(n), kustoTypes(n), allowDynamic=options.allowDynamic) + if options.verbose + if isfield(options, "columnNames") + fprintf(2, "Data not convertible MATLAB, type: %s, Kusto schema type: %s, column number: %d, column name: %s\n",... + matlabTypes(n), kustoTypes(n), n, options.columnNames(n)); + else + fprintf(2, "Data not convertible MATLAB, type: %s, Kusto schema type: %s, column number: %d\n",... + matlabTypes(n), kustoTypes(n), n); + end + tf = false; + else + tf = false; + break; + end + end + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestTable.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestTable.m new file mode 100644 index 0000000..b37c9f5 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestTable.m @@ -0,0 +1,64 @@ +function [success, result] = ingestTable(T, options) + % ingestTable Ingests a MATLAB table to an Azure Data Explorer Table + % The table is converted to a temporary local parquet file to facilitate + % ingestion. + % + % Example: + % inputTable = parquetread("myfile.parquet"); + % [success, result] = mathworks.adx.ingestTable(inputTable, tableName="mytablename") + % + % Arguments: + % T: A MATLAB table + % + % Options: + % tableName: A name for the table, if not specified the tabled will + % be named ingestedTable- + % database: database name, if not specified the database configured in + % the json settings file will be used. + % cluster: Cluster name, if not specified the database configured in + % the json settings file will be used. + % bearerToken: Bearer Token, if not specified the database configured in + % the json settings file will be used. + % mode: "drop" drop an existing table with the tableName before ingesting + % "create" create the table if it does not exist + % "add" (Default) ingest into an existing table + % verbose: Logical to enable additional feedback, default is true + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + T table; + options.tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.mode string {mustBeMember(options.mode, ["drop","create","add"])} = "add" + options.verbose (1,1) logical = true + end + + if options.verbose; disp("Writing table to temporary parquet file"); end + parquetFile = [tempname, '.parquet']; + parquetwrite(parquetFile, T); + cleanup = onCleanup(@() delete(parquetFile)); + + if isfield(options, 'tableName') + tableName = options.tableName; + else + N = datetime("now", "TimeZone", "UTC"); + N.Format = "yyyyMMdd'T'HHmmss"; + tableName = "ingestedTable-" + string(N); + if options.verbose + fprintf("Using table name: %s\n", tableName); + end + end + + args = {"mode", options.mode, "verbose" options.verbose}; + args = mathworks.utils.addArgs(options, ["database", "cluster", "bearerToken"], args); + + [success, result] = mathworks.adx.ingestFile(parquetFile, tableName, args{:}); + if ~success + if options.verbose + fprintf(2,'Ingestion failed\n'); + end + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/ingestTableQueue.m b/Software/MATLAB/app/system/+mathworks/+adx/ingestTableQueue.m new file mode 100644 index 0000000..66e0a0a --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/ingestTableQueue.m @@ -0,0 +1,55 @@ +function success = ingestTableQueue(T, options) + % ingestTableQueue Ingests a MATLAB table to an Azure Data Explorer Table + % The table is converted to a temporary local parquet file to facilitate + % ingestion. + % + % Arguments: + % T: A MATLAB table. + % + % Optional named arguments: + % tableName: A name for the table, if not specified the tabled will + % be named ingestedTable- + % database: database name, if not specified the database configured in + % the json settings file will be used. + % cluster: Cluster name, if not specified the database configured in + % the json settings file will be used. + % bearerToken: Bearer Token, if not specified the database configured in + % the json settings file will be used. + % + + % Copyright 2023 The MathWorks, Inc. + + arguments + T table; + options.tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + warning("ingestTableQueue is a work in progress and is not completely functional at this time & should not be used"); + + parquetFile = [tempname, '.parquet']; + parquetwrite(parquetFile, T); + cleanup = onCleanup(@() delete(parquetFile)); + + args = {"format", "parquet"}; + if isfield(options, tableName) + args{end+1} = "tableName"; + args{end+1} = options.tableName; + else + N = datetime("now", "TimeZone", "UTC"); + N.Format = "yyyyMMdd'T'HHmmss"; + args{end+1} = "tableName"; + args{end+1} = "ingestedTable-" + string(N); + fprintf("Using table name: %s\n", args{end}); + end + + args = mathworks.utils.addArgs(options, ["database", "cluster", "bearerToken"], args); + success = mathworks.adx.ingestFileQueue(parquetFile, args{:}); + if ~success + if options.verbose + fprintf(2,'Ingestion failed\n'); + end + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/isClusterRunning.m b/Software/MATLAB/app/system/+mathworks/+adx/isClusterRunning.m new file mode 100644 index 0000000..0dc1379 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/isClusterRunning.m @@ -0,0 +1,40 @@ +function [tf, cluster] = isClusterRunning(options) + % isClusterRunning Returns a logical true if the cluster is running + % If the cluster is not running a false is returned. The state is optionally + % displayed. An optional adx.control.models.Cluster object is returned with + % full cluster metadata information. + % + % Example: + % tf = mathworks.adx.isClusterRunning(); + + % Copyright 2024 The MathWorks, Inc. + + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.resourceGroup string {mustBeTextScalar, mustBeNonzeroLengthText} + options.subscriptionId string {mustBeTextScalar, mustBeNonzeroLengthText} + options.apiVersion string {mustBeTextScalar, mustBeNonzeroLengthText} + options.verbose (1,1) logical = true + end + + args = mathworks.utils.addArgs(options, ["cluster", "resourceGroup", "subscriptionId", "apiVersion"]); + clusterObj = mathworks.adx.clustersGet(args{:}); + + if ~isa(clusterObj, 'adx.control.models.Cluster') || ~isscalar(clusterObj) + error("adx:isClusterRunning", "mathworks.adx.clustersGet failed"); + end + + if isprop(clusterObj, "xproperties") && isprop(clusterObj.xproperties, "state") + cluster = clusterObj; + if strcmpi(clusterObj.xproperties.state, "Running") + tf = true; + else + if options.verbose + fprintf("Cluster not running, state is: %s\n", clusterObj.xproperties.state); + end + tf = false; + end + else + error("adx:isClusterRunning", "mathworks.adx.clustersGet xproperties or xproperties.state not found"); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/listTables.m b/Software/MATLAB/app/system/+mathworks/+adx/listTables.m new file mode 100644 index 0000000..23d48a0 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/listTables.m @@ -0,0 +1,41 @@ +function [tableNames, success, tableDetails] = listTables(options) + % listTables Returns a list of tables and their properties + % + % contains the specified table or all tables in the + % database with a detailed summary of each table's properties. + % You must have at least Database User, Database Viewer, or Database + % Monitor permissions to run this command. + % + % Optional arguments + % database: Database name string, the default is taken from the JSON settings file. + % + % cluster: Cluster name string, the default is taken from the JSON settings file. + % + % Returns + % tableNames: A string array of the table names. + % + % Success: Logical true if the query successfully completes, otherwise false. + % + % tableDetails: A table containing metadata about the tables. + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.verbose (1,1) logical + end + + args = mathworks.utils.addArgs(options, ["bearerToken", "cluster", "verbose"]); + + query = '.show tables details'; + + [tableDetails, success] = mathworks.adx.run(query, args{:}); + + if success + tableNames = tableDetails.TableName'; + else + tableNames = string.empty; + tableDetails = table.empty; + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/mgtCommand.m b/Software/MATLAB/app/system/+mathworks/+adx/mgtCommand.m new file mode 100644 index 0000000..07354e6 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/mgtCommand.m @@ -0,0 +1,138 @@ +function [result, success, requestId] = mgtCommand(command, options) + % mgtCommand Runs a management command + % + % Required argument + % query: query to be run as a string or character vector + % + % Optional arguments + % database: Name of the the database to be used, by default a value will be + % taken from the settings JSON file. + % + % propertyNames: Property names to be applies to the query, specified as a + % string array. + % + % propertyValues: Property values that correspond the propertyNames, specified + % as a cell array. + % + % type: Force the type of the query, options are "query" or "command" by default + % the query will be examined to determine the type. + % + % scopes: For commands scopes can be specified as a string array. + % + % cluster: A non default cluster can be specified as a string or character vector. + % + % convertDynamics: Logical to determine if dynamic fields are decoded or not. + % + % nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + % null values are handled in returned results. + % + % verbose: A logical to enable additional output. + % + % Return values + % result: Table containing the primary result of the query or command. If the + % request failed the result will be a adx.control.models.ErrorResponse + % rather than a table. + % + % success: A logical to indicate if the query succeed or not. + % + % requestId: The request's ID string in ADX + % + % resultTables: Returned tables including metadata, values have not been processed + % into MATLAB Tables. + % + % dataSetHeader: For calls that use the V2 REST API the value contains version + % information and whether the call is progressive or not. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + % + % dataSetCompletion: For calls that use the V2 REST API the value indicates + % if the request was canceled or has an error and if so + % error information, in general the success value and result + % (adx.control.models.ErrorResponse) is simpler to work with. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion + + % Copyright 2024 The MathWorks, Inc. + + arguments + command string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.scopes string + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = true + options.verbose (1,1) logical = false + end + + if isfield(options, "propertyNames") && isfield(options, "propertyValues") + if numel(options.propertyNames) ~= numel(options.propertyValues) + error("adx:mgtCommand", "The number of propertyNames and propertyValues must match"); + else + if options.verbose; fprintf("Applying properties\n"); end + applyProperties = true; + end + else + applyProperties = false; + end + + request = adx.data.models.ManagementRequest; + % Set the command string + request.csl = command; + % Don't set the database use the default in .json config file + if isfield(options, "database") + request.db = options.database; + end + + if applyProperties + crpo = adx.data.models.ClientRequestPropertiesOptions; + for n = 1:numel(options.propertyNames) + if isprop(crpo, options.propertyNames(n)) + try + if options.verbose; fprintf("Setting property: %s\n", options.propertyNames(n)); end + crpo.(options.propertyNames(n)) = options.propertyValues{n}; + catch exception + fprintf("Assignment failure for: %s, property class: %s, value class: %s",... + options.propertyNames(n), class(crpo.(options.propertyNames(n))), class(options.propertyValues{n})); + rethrow(exception); + end + else + error("adx:mgtCommand", "adx.data.models.ClientRequestPropertiesOptions does not have a property named: %s", options.propertyNames(n)); + end + end + crp = adx.data.models.ClientRequestProperties(); + crp.Options = crpo; + request.requestProperties = crp; + end + + args = mathworks.utils.addArgs(options, "scopes"); + mgt = adx.data.api.Management(args{:}); + + args = mathworks.utils.addArgs(options, ["verbose", "cluster"]); + [code, runResult, response, requestId] = mgt.managementRun(request, args{:}); + + success = false; + if code == matlab.net.http.StatusCode.OK + success = true; + % Convert the response to Tables + if options.verbose; fprintf("Converting response to table(s)\n"); end + if isa(runResult, 'adx.data.models.QueryV1ResponseRaw') + result = mathworks.internal.adx.queryV1Response2Tables(runResult, convertDynamics=options.convertDynamics, nullPolicy=options.nullPolicy, allowNullStrings=options.allowNullStrings); + else + fprintf("Expected result of type: adx.data.models.QueryV1ResponseRaw, received & returning: %s\n", class(runResult)); + result = runResult; + end + elseif isa(runResult, 'adx.control.models.ErrorResponse') + result = runResult; + if isprop(result, 'error') && isprop(result.error, 'message') + fprintf('Error:\n Code: %s\n Command: %s\n Message: %s\n', code, request.csl, result.error.message); + else + fprintf('Error:\n Code: %s\n Command: %s\n', code, request.csl); + end + else + result = adx.control.models.ErrorResponse.empty; + fprintf('Unexpected error:\n Code: %s\n Command: %s\n', code, request.csl); + disp(" Response:"); + disp(response); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/run.m b/Software/MATLAB/app/system/+mathworks/+adx/run.m new file mode 100644 index 0000000..34f4b23 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/run.m @@ -0,0 +1,152 @@ +function [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = run(query, options) + % run Runs a KQL query or management command + % This ia a high-level interface to simplify running most queries. + % + % Required argument + % query: query to be run as a string or character vector + % + % Optional arguments + % database: Name of the the database to be used, by default a value will be + % taken from the settings JSON file. + % + % propertyNames: Property names to be applies to the query, specified as a + % string array. + % + % propertyValues: Property values that correspond the propertyNames, specified + % as a cell array. + % + % type: Force the type of the query, options are "query" or "command" by default + % the query will be examined to determine the type. + % + % scopes: For commands scopes can be specified as a string array. + % + % cluster: A non default cluster can be specified as a string or character vector. + % + % bearerToken: Token used to authenticate KQL queries only, overrides JSON + % settings file based authentication. Provided as a text scalar. + % + % convertDynamics: Logical to determine if dynamic fields are decoded or not. + % + % nullPolicy: A mathworks.adx.NullPolicy enumeration to determine how + % null values are handled in returned results. + % + % customRowDecoder: A function handle to a function that will be called to decode + % Primary Result table JSON rows instead of the default decoder. + % See: Documentation/Performance.md for more details. + % + % useParallel: A logical to enable the use of Parallel Computing Toolbox if + % available to improve performance on large queries. + % Default is false. Applies to KQL queries only. + % See: Documentation/Performance.md for more details. + % + % parallelThreshold: The number of rows above which a parpool will be started + % rather than just working serially, if making a large + % query or repeated queries then the overhead caused by + % the creation of a parpool should be amortized. + % The default is 1000 rows. + % + % verbose: A logical to enable additional output. + % + % + % Return values + % result: Table containing the primary result of the query or command. If the + % request failed the result will be a adx.control.models.ErrorResponse + % rather than a table. + % + % success: A boolean to indicate if the query succeed or not. + % + % requestId: The request's ID string in ADX + % + % resultTables: Returned tables including metadata, values have not been processed + % into MATLAB Tables. + % + % dataSetHeader: For calls that use the V2 REST API the value contains version + % information and whether the call is progressive or not. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetheader + % + % dataSetCompletion: For calls that use the V2 REST API the value indicates + % if the request was cancelled or has an error and if so + % error information, in general the success value and result + % (adx.control.models.ErrorResponse) is simpler to work with. + % See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response-v2#datasetcompletion + % + % Example: + % [result, success] = mathworks.adx.run('print mycol="Hello World"') + + % Copyright 2024 The MathWorks, Inc. + + arguments + query string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.type string {mustBeTextScalar, mustBeNonzeroLengthText} + options.scopes string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) + options.customRowDecoder function_handle = function_handle.empty + options.useParallel (1,1) logical = false + options.parallelThreshold (1,1) int32 = 1000; + options.verbose (1,1) logical = false + end + + % Clean up any white space + query = strip(query); + + if isfield(options, "type") + if strcmpi(options.type, "query") + type = "query"; + allowNullStrings = false; + elseif strcmpi(options.type, "command") + type = "command"; + allowNullStrings = true; + else + error("adx:run", "Invalid type value, expecting query or command found: %s", options.type); + end + else + if startsWith(query, ".") + if startsWith(query, ".show") + type = "query"; + allowNullStrings = true; + else + type = "command"; + allowNullStrings = true; + end + else + type = "query"; + allowNullStrings = false; + end + end + + args = mathworks.utils.addArgs(options, ["database", "propertyNames", "propertyValues", "verbose", "convertDynamics", "nullPolicy", "cluster"]); + args{end+1} = "allowNullStrings"; + if isfield(options, "allowNullStrings") + args{end+1} = options.allowNullStrings; + else + args{end+1} = allowNullStrings; + end + + if strcmp(type, "query") + args = mathworks.utils.addArgs(options, ["bearerToken", "customRowDecoder", "useParallel", "parallelThreshold"], args); + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); + elseif strcmp(type, "command") + args = mathworks.utils.addArgs(options, "scopes", args); + % Values don't apply for management/v1 responses + resultTables = {}; + dataSetHeader = adx.data.models.DataSetHeader.empty; + dataSetCompletion = adx.data.models.DataSetCompletion.empty; + + [result, success, requestId] = mathworks.adx.mgtCommand(query, args{:}); + else + error("adx:run", "Invalid type value, expecting query or command found: %s", type); + end + + % If the result is a single table, mostly should be extract it from + % the cell array + if iscell(result) && isscalar(result) && istable(result{1}) + result = result{1}; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+adx/tSQLQuery.m b/Software/MATLAB/app/system/+mathworks/+adx/tSQLQuery.m new file mode 100644 index 0000000..e9c9bbc --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/tSQLQuery.m @@ -0,0 +1,47 @@ +function [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = tSQLQuery(query, options) + % tSQLQuery Runs a T-SQL query + % This is a higher-level wrapper function for KQLQuery which sets the + % query propertyName and propertyValue to enable the tSQL syntax. + % Input arguments and return values are as per KQLQuery. + % + % It assumes the query_language property is not already set, if so it will + % be overwritten. + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/t-sql + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + query string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = false; + options.verbose (1,1) logical = false; + end + + if isfield(options, "propertyNames") + propertyNames = options.propertyNames; + else + propertyNames = string.empty; + end + propertyNames(end+1) = "query_language"; + + if isfield(options, "propertyValues") + propertyValues = options.propertyValues; + else + propertyValues = {}; + end + propertyValues{end+1} = "sql"; + + if numel(propertyValues) ~= numel(propertyNames) + error("adx:tSQLQuery","The number of propertyName values and propertyValue values should be equal"); + end + + args = {"propertyNames", propertyNames, "propertyValues", propertyValues}; + args = mathworks.utils.addArgs(options, ["verbose", "database", "cluster", "convertDynamics", "nullPolicy", "allowNullStrings"], args); + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); +end diff --git a/Software/MATLAB/app/system/+mathworks/+adx/tableExists.m b/Software/MATLAB/app/system/+mathworks/+adx/tableExists.m new file mode 100644 index 0000000..0a08466 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+adx/tableExists.m @@ -0,0 +1,20 @@ +function tf = tableExists(table, options) + % TABLEEXISTS Returns true is a given table exists + % + % Example: + % tableExists = mathworks.adx.tableExists(tableName, database=database, cluster=cluster); + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + table string {mustBeTextScalar, mustBeNonzeroLengthText} + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = mathworks.utils.addArgs(options, ["database", "cluster"]); + tablesFound = mathworks.adx.listTables(args{:}); + + tf = any(matches(tablesFound, table)); +end + diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/buildSettingsFile.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/buildSettingsFile.m new file mode 100644 index 0000000..ed85cc1 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/buildSettingsFile.m @@ -0,0 +1,165 @@ +function buildSettingsFile(options) + % buildSettingsFile Gets user input for JSON settings file fields + % Template files can be found in /Software/MATLAB/config + % + % Optional argument + % filename: Filename to store settings, default is /Software/MATLAB/config/adx.Client.Settings.json> + + % (c) 2023 MathWorks Inc. + + arguments + options.filename string {mustBeTextScalar, mustBeNonzeroLengthText} = mathworks.adx.adxRoot("config", "adx.Client.Settings.json") + end + + authMethodsShort = ["clientSecret", "deviceCode", "interactiveBrowser"]; + authMethodsLong = ["Client Secret", "Device Code", "Interactive Browser"]; + + fprintf("\n"); + disp("Enter configuration and authentication settings"); + disp("==============================================="); + fprintf("\n"); + + if ~overwrite(options.filename) + disp("Exiting"); + return; + end + + s = struct; + s.preferredAuthMethod = getAuth(authMethodsShort, authMethodsLong); + settingsFields = getTemplateFields(s.preferredAuthMethod); + + for n = 1:numel(settingsFields) + if ~strcmp(settingsFields{n}, "preferredAuthMethod") + s.(settingsFields{n}) = getField(settingsFields{n}); + end + end + + writeSettingsFile(s, options.filename) + disp("Configuration complete"); + disp([" As a simple test run: [result, success] = mathworks.adx.run('print mycol=""Hello World""') ", newline]) +end + + +function writeSettingsFile(s, filename) + fid = fopen(filename, 'w'); + if fid == -1 + error("adx:buildSettingsFile", "Error writing to file: %s", filename); + end + closeAfter = onCleanup(@() fclose(fid)); + fprintf(fid, "%s", jsonencode(s, PrettyPrint=true)); + fprintf("Settings written to: %s\n", filename); +end + + +function value = getField(fieldname) + switch fieldname + case "subscriptionId" + value = getSubscriptionId(); + case "tenantId" + value = getTenantId(); + case "clientId" + value = getClientId(); + case "clientSecret" + value = getClientSecret(); + case "database" + value = getDatabase(); + case "resourceGroup" + value = getResourceGroup(); + case "cluster" + value = getCluster(); + case "preferredAuthMethod" + error("adx:buildSettingsFile", "Should not request authentication method at this point"); + + otherwise + fprintf("Unknown field name: %s, skipping\n", fieldname) + end +end + + +function value = getCluster() + value = strip(input('Enter a default Azure Data Explorer database URL, e.g. https://mycluster.myregion.kusto.windows.net: ', 's')); +end + + +function value = getResourceGroup() + value = strip(input('Enter Azure resource group: ', 's')); +end + + +function value = getDatabase() + value = strip(input('Enter a default Azure Data Explorer database name: ', 's')); +end + + +function value = getClientSecret() + value = strip(input('Enter Azure Data Explorer Client Secret: ', 's')); +end + + +function value = getClientId() + value = strip(input('Enter Azure Data Explorer Client/App Id: ', 's')); +end + + +function value = getTenantId() + value = strip(input('Enter Azure Tenant Id: ', 's')); +end + + +function value = getSubscriptionId() + value = strip(input('Enter Azure Subscription Id: ', 's')); +end + + +function settingsFields = getTemplateFields(authMethod) + basePath = mathworks.adx.adxRoot("config", "adx.Client.Settings.json"); + fullPath = strcat(basePath, ".", string(authMethod), "Template"); + if ~isfile(fullPath) + error("adx:buildSettingsFile", "Settings template file not found: %s", fullPath); + end + s = jsondecode(fileread(fullPath)); + settingsFields = fieldnames(s); +end + + +function auth = getAuth(authMethodsShort, authMethodsLong) + arguments + authMethodsShort (1,:) string {mustBeNonzeroLengthText} + authMethodsLong (1,:) string {mustBeNonzeroLengthText} + end + + if numel(authMethodsShort) ~= numel(authMethodsLong) + error("adx:buildSettingsFile", "Expected size of authMethodsShort and authMethodsLong to match"); + end + + disp("Enter the preferred authentication method"); + authPath = mathworks.adx.adxRoot(-2, "Documentation", "Authentication.md"); + if ~isfile(authPath) + warning("adx:buildSettingsFile", "Authentication.md file not found: %s", authPath); + else + authLink = sprintf('%s', authPath, authPath); + fprintf('For more details, ctrl-c and see: %s\n', authLink); + end + fprintf("The following authentication modes are supported:\n\n"); + for n = 1:numel(authMethodsShort) + fprintf("%d. %s (%s)\n", n, authMethodsLong(n), authMethodsShort(n)); + end + + inpStr = sprintf("\nEnter authentication method number [1-%d]: ", numel(authMethodsShort)); + authIdx = str2double(strip(input(inpStr,'s'))); + if authIdx < 1 || authIdx > numel(authMethodsShort) + error("adx:buildSettingsFile", "Invalid authentication method number: %s", authIdx); + end + auth = authMethodsShort(authIdx); +end + + +function tf = overwrite(filename) + if isfile(filename) + fprintf("Found an existing settings file: %s\n", filename) + userInput = strip(input('Overwrite it with new values Y/[N]: ', 's')); + tf = strcmpi(userInput, 'y'); + else + tf = true; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2Guid.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2Guid.m new file mode 100644 index 0000000..c39909a --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2Guid.m @@ -0,0 +1,23 @@ +function literal = charOrString2Guid(value) + % charOrString2Guid Converts a scalar MATLAB string or char to a Kusto guid + % Example: guid(74be27de-1e4e-49d9-b579-fe0b331d3642) + % A scalar or empty input value must be provided. + % If an empty value is provided guid(null) is returned. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/guid + + % Copyright 2024 The MathWorks, Inc. + + arguments + value string + end + + if isempty(value) + literal = "guid(null)"; + else + if ~isStringScalar(value) + error("adx:charOrString2Guid", "Expected a scalar or empty value"); + end + literal = "guid(" + value + ")"; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2String.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2String.m new file mode 100644 index 0000000..bdefcd6 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/charOrString2String.m @@ -0,0 +1,94 @@ +function literal = charOrString2String(value, options) + % charOrString2String Converts a MATLAB char or string to a Kusto string + % A string is returned. + % Input must be a empty, missing, scalar string or character vector. + % + % If the optional logical named argument verbatim (default: false) a @ sign is + % prepended to the string. The backslash character (\) stands for itself and + % isn't an escape character. Prepending the @ character to string literals + % serves as a verbatim identifier. In verbatim string literals, double quotes + % are escaped with double quotes and single quotes are escaped with single quotes. + % + % An obfuscated string is created by setting the optional named argument + % obfuscated (default: false). It prepends a H character to a verbatim + % or string literal. The obfuscated argument is not applied to multi-lines. + % + % Multi-line string literals support newline (\n) and return (\r) characters. + % Multi-line string literals do not support escaped characters, similar to verbatim + % string literals. Multi-line string literals don't support obfuscation. + % + % Kusto does not support null strings hence empty or missing MATLAB string + % values are treated as follows: + % + % | Literal Verbatim Multi-line + % ----------------------------------------------- + % missing | "" @"" `````` + % empty | "" @"" `````` + % + % If an empty string is provided "", `````` or @"" is returned. + % + % Optional named arguments + % verbatim Logical, default: false + % multiline Logical, default: false + % + % Verbatim and multiline cannot be enabled at the same time. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/string + + % Copyright 2024 The MathWorks, Inc. + + arguments + value string + options.verbatim (1,1) logical = false + options.multiline (1,1) logical = false + options.obfuscated (1,1) logical = false + end + + if options.verbatim && options.multiline + error("adx:charOrString2String", "Verbatim and multiline cannot be enabled at the same time"); + end + + if options.verbatim + if isempty(value) || ismissing(value) + literal = "@"""""; + else + if ~isStringScalar(value) + error("adx:charOrString2String", "Expected a scalar or empty value"); + end + value = replace(value, '"', '""'); + value = replace(value, "'", "''"); + literal = "@" + value; + end + if options.obfuscated + literal = "H" + literal; + end + elseif options.multiline + if isempty(value) || ismissing(value) + literal = "``````"; + else + if ~isStringScalar(value) + error("adx:charOrString2String", "Expected a scalar or empty value"); + end + literal = "```" + value + "```"; + end + else + % If not a multiline or verbatim + if isempty(value) || ismissing(value) + literal = ""; + else + if ~isStringScalar(value) + error("adx:charOrString2String", "Expected a scalar or empty value"); + end + value = replace(value, '\', '\\'); + %value = replace(value, '\t', '\\t'); + %value = replace(value, '\n', '\\n'); + %value = replace(value, '\r', '\\r'); + value = replace(value, '"', '\"'); + value = replace(value, "'", "\'"); + literal = """" + value + """"; + end + if options.obfuscated + literal = "H" + literal; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/datetime2datetime.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/datetime2datetime.m new file mode 100644 index 0000000..1d7591c --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/datetime2datetime.m @@ -0,0 +1,26 @@ +function literal = datetime2datetime(value) + % datetime2datetime Converts a scalar MATLAB datetime to a Kusto datetime + % A scalar or empty input value must be provided. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/datetime + + % Copyright 2024 The MathWorks, Inc. + + arguments + value datetime + end + + if isempty(value) + literal = "datetime(null)"; + else + if ~isscalar(value) + error("adx:datetime2datetime", "Expected a scalar or empty value"); + end + if isnat(value) + literal = "datetime(null)"; + else + value.Format = 'yyyy-MM-dd''T''HH:mm:ss.SSS'; + literal = "datetime(" + string(value) +")"; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorAdditionalInfo.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorAdditionalInfo.m new file mode 100644 index 0000000..ffcffda --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorAdditionalInfo.m @@ -0,0 +1,19 @@ +function dispErrorAdditionalInfo(addInfo, options) + % Displays a adx.control.models.ErrorAdditionalInfo + + % Copyright 2023 The MathWorks, Inc. + + arguments + addInfo (1,1) adx.control.models.ErrorAdditionalInfo + options.prefix string {mustBeTextScalar} = "" + end + + fprintf("%sErrorAdditionalInfo:\n", options.prefix); + if isprop(addInfo, 'type') && ~isempty(addInfo.type) + fprintf("%s type: %s\n", options.prefix, addInfo.type); + end + if isprop(addInfo, 'info') && ~isempty(addInfo.info) + fprintf("%s info:\n", options.prefix); + disp(addInfo.info) + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorDetails.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorDetails.m new file mode 100644 index 0000000..a9e298b --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorDetails.m @@ -0,0 +1,45 @@ +function dispErrorDetails(details, options) + % dispErrorDetails Display a adx.control.models.ErrorDetail + + % Copyright 2023 The MathWorks, Inc. + + arguments + details (1,1) adx.control.models.ErrorDetail + options.prefix string {mustBeTextScalar} = "" + end + + fprintf("%sErrorDetails:\n", options.prefix); + if isprop(details, 'code') && ~isempty(details.code) + fprintf("%s code: %s\n", options.prefix, details.code); + end + if isprop(details, 'message') && ~isempty(details.message) + fprintf("%s message: %s\n", options.prefix, details.message); + end + if isprop(details, 'target') && ~isempty(details.target) + fprintf("%s target: %s\n", options.prefix, details.target); + end + if isprop(details, 'details') && ~isempty(details.details) + indentPrefix = options.prefix + " "; + for n =1:numel(details.details) + if isa(details.details(n), 'adx.control.models.ErrorDetails') + details.details(n).disp(prefix=indentPrefix); + else + disp(details.details(n)); + end + end + end + if isprop(details, 'additionalInfo') && ~isempty(details.additionalInfo) + indentPrefix = options.prefix + " "; + for n =1:numel(details.additionalInfo) + if isa(details.additionalInfo(n), 'adx.control.models.ErrorAdditionalInfo') + details.additionalInfo(n).disp(prefix=indentPrefix); + else + disp(details.additionalInfo(n)); + end + end + end + if isprop(details, 'context') && ~isempty(details.context) + fprintf("%s context:\n",options.prefix) + disp(details.context); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorResponse.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorResponse.m new file mode 100644 index 0000000..6c83e52 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/dispErrorResponse.m @@ -0,0 +1,17 @@ +function dispErrorResponse(err, options) + % dispErrorResponse Display a adx.control.models.ErrorResponse + + % Copyright 2023 The MathWorks, Inc. + + arguments + err (1,1) adx.control.models.ErrorResponse + options.prefix string {mustBeTextScalar} = "" + end + + fprintf("%sErrorResponse:\n", options.prefix); + if isprop(err, 'error') + if isa(err.error, 'adx.control.models.ErrorDetail') + err.error.disp(prefix=options.prefix); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Decimal.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Decimal.m new file mode 100644 index 0000000..bf7ce9a --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Decimal.m @@ -0,0 +1,29 @@ +function literal = doubleOrSingle2Decimal(value) + % doubleOrSingle2Decimal Converts a MATLAB double or single to a Kusto decimal + % A string is returned. + % If empty decimal(null) is returned. + % Otherwise decimal() is returned. + % A scalar or empty input value must be provided. + % + % Note Arithmetic operations involving decimal values are significantly slower + % than operations on real data type. As MATLAB does not support floating point + % precision beyond double using doubleOrSingle2Real() instead is recommended + % if a real value can be used. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/decimal + + % Copyright 2024 The MathWorks, Inc. + + arguments + value + end + + if isempty(value) + literal = "decimal(null)"; + else + if ~isscalar(value) + error("adx:doubleOrSingle2Decimal", "Expected a scalar or empty value"); + end + literal = "decimal("+ string(value) ")"; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Real.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Real.m new file mode 100644 index 0000000..d5cc62e --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/doubleOrSingle2Real.m @@ -0,0 +1,37 @@ +function literal = doubleOrSingle2Real(value) + % doubleOrSingle2Real Converts a MATLAB double or single to a Kusto real + % A string is returned. + % If empty real(null) is returned. + % If nan real(nan) is returned. + % If +inf real(+inf) is returned. + % If -inf real(-inf) is returned. + % A scalar or empty input value must be provided. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/real + + % Copyright 2024 The MathWorks, Inc. + + arguments + value + end + + + if isempty(value) + literal = "real(null)"; + else + if ~isscalar(value) + error("adx:doubleOrSingle2Real", "Expected a scalar or empty value"); + end + if isnan(value) + literal = "real(nan)"; + elseif isinf(value) + if value > 0 + literal = "real(+inf)"; + else + literal = "real(-inf)"; + end + else + literal = string(value); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/duration2Timespan.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/duration2Timespan.m new file mode 100644 index 0000000..825fcc7 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/duration2Timespan.m @@ -0,0 +1,48 @@ +function timespan = duration2Timespan(d) + % duration2Timespan Converts a MATLAB duration to a Kusto timespan + % Input must be a scalar duration, duration.empty or duration NaN. + % A timespan literal is returned as a scalar string. + % At most millisecond precision is supported. + % A duration.empty or duration NaN are returned as "timespan(null)" + % Other values are returned in the format: "timespan(days.hours:minutes:seconds.milliseconds)" + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan + + % Copyright 2024 The MathWorks, Inc. + + arguments + d duration + end + + if isempty(d) + timespan = "timespan(null)"; + else + if ~isscalar(d) + error("adx:duration2Timespan", "Expected a scalar or empty value"); + end + if isnan(d) + timespan = "timespan(null)"; + else + d.Format = 'dd:hh:mm:ss.SSS'; + dStr = char(d); + dotSplit = split(dStr, '.'); + ms = dotSplit{end}; + colonSplit = split(dotSplit{1}, ':'); + if numel(colonSplit) == 4 + dd = colonSplit{1}; + hh = colonSplit{2}; + mm = colonSplit{3}; + ss = colonSplit{4}; + elseif numel(colonSplit) == 3 + dd = '00'; + hh = colonSplit{1}; + mm = colonSplit{2}; + ss = colonSplit{3}; + else + error("adx:duration2Timespan", "Expected duration string value to have 3 or 4 fields"); + end + % Uses format for literal like: timespan(days.hours:minutes:seconds.milliseconds) + timespan = sprintf("timespan(%s.%s:%s:%s.%s)",dd,hh,mm,ss,ms); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m new file mode 100644 index 0000000..85a42fb --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/exampleCustomRowDecoder.m @@ -0,0 +1,113 @@ +function cArray = exampleCustomRowDecoder(rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, nullPolicy, allowNullStrings, useParallel, parallelThreshold, verbose) + % exampleCustomRowDecoder Example of a custom JSON parser function + % Sample decoder that handles an array of rows of the form: + % [128030544,1.0,"myStringValue-1"] + % with fields of types int64, double and string. + % + % It will not process other data and is intended for speed rather than + % strict correctness or robustness. + % + % The custom decoder is applied to the PrimaryResult rows field only. + % + % It is required to return a cell array of size number of rows by the + % number of columns that can be converted to a MATLAB table with the + % given schema. + % + % It is not required to respect input arguments flags if foreknowledge of + % returned data permits it. + % + % Custom decoders are applied to nonprogressive KQL API v2 mode queries only. + % If support for other query types is required contact MathWorks. + % + % Example: + % query = sprintf('table("%s", "all")', tableName); + % crd = @mathworks.internal.adx.exampleCustomRowDecoder; + % [result, success] = mathworks.adx.run(query, customRowDecoder=crd); + % + % For a generic decoder see: getRowsWithSchema. + + % Copyright 2024 The MathWorks, Inc. + + arguments + rows string + tableSchema string + matlabSchema string + kustoSchema string + convertDynamics (1,1) logical %#ok + nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 %#ok + allowNullStrings (1,1) logical = false %#ok + useParallel (1,1) logical = false + parallelThreshold (1,1) int32 = 1000; + verbose (1,1) logical = false + end + + numCols = numel(matlabSchema); + if numel(tableSchema) ~= numCols + error("adx:getRowWithSchema", "Size of table schema: %d, does not match the MATLAB schema: %d", numel(tableSchema), numCols); + end + if numel(kustoSchema) ~= numCols + error("adx:getRowWithSchema", "Size of Kusto schema: %d, does not match the MATLAB schema: %d", numel(kustoSchema), numCols); + end + + if numel(rows) > 1000 && verbose + showCount = true; + else + showCount = false; + end + + % The output will all be in a cell array to be assigned to a cell array row and later to a table + cArray = cell(numel(rows), numCols); + + if useParallel && numel(rows) >= parallelThreshold && ~isempty(ver('parallel')) + pool = gcp('nocreate'); + if isempty(pool) + % Note the default decoder requires a process based pool as opposed to "Threads" + % because of its use of Java, which might otherwise be preferable + % pool = parpool('Threads'); + pool = parpool('Processes'); + end + + if isa(pool, 'parallel.ThreadPool') + doParfor = true; + elseif isprop(pool,'Cluster') && isprop(pool.Cluster,'Profile') && strcmp(pool.Cluster.Profile, 'Processes') + doParfor = true; + else + % Overhead of a remote cluster may not be justified + fprintf("Found a parpool which is not process or thread based, rows will be processed serially.\n"); + doParfor = false; + end + else + doParfor = false; + end + + if doParfor + if showCount + fprintf("Processing: %d rows in parallel using: %d workers with a custom row decoder\n", numel(rows), pool.NumWorkers); + end + parfor rowIdx = 1:numel(rows) + cArray(rowIdx,:) = procRow(rows(rowIdx)); + end + else + fprintf("Processing: %d rows serially using a custom row decoder\n", numel(rows)); + for rowIdx = 1:numel(rows) + if showCount && mod(rowIdx, 500) == 0 + fprintf("Processing row: %d of %d\n", rowIdx, numel(rows)) + end + cArray(rowIdx,:) = procRow(rows(rowIdx)); + end + end +end + + +function result = procRow(row) + % Row format is well know so can skip some checks + % Expecting only one [ + row = strip(row, "left", "["); + % Expecting only one ] + row = strip(row, "right", "]"); + fields = split(row, ","); + l = sscanf(fields(1), "%ld"); + d = str2double(fields(2)); + % Expecting only one layer of quotes + result = {l; d; strip(fields(3),"both", '"')}; +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDataBearerToken.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDataBearerToken.m new file mode 100644 index 0000000..2988705 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDataBearerToken.m @@ -0,0 +1,32 @@ +function bearerToken = getDataBearerToken(database, cluster) + % getDataBearerToken Gets a bearer token by forcing a query + + % Copyright 2023 The MathWorks, Inc. + + arguments + database string {mustBeTextScalar, mustBeNonzeroLengthText} + cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + req = adx.data.models.QueryRequest('db', database, 'csl', 'print Test="Query to force the return of a bearer token"'); + q = adx.data.api.Query('cluster', cluster); + [code, result, response] = q.queryRun(req); %#ok<*ASGLU> + + if code ~= matlab.net.http.StatusCode.OK + if isa(result, 'adx.control.models.ErrorResponse') + if isprop(result, 'error') + if isa(result.error, 'adx.control.models.ErrorDetail') + if isprop(result.error, 'code') + fprintf("Error code: %s\n", result.error.code); + end + if isprop(result.error, 'message') + fprintf("Error message: %s\n", result.error.message); + end + end + end + end + error("adx:getDataBearerToken", "Error getting bearer token"); + else + bearerToken = q.bearerToken; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDefaultConfigValue.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDefaultConfigValue.m new file mode 100644 index 0000000..ba57bda --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getDefaultConfigValue.m @@ -0,0 +1,25 @@ +function value = getDefaultConfigValue(field, options) + % getDefaultConfigValue Reads a field from the config file + % A string is returned. + + % Copyright 2023 The MathWorks, Inc. + + arguments + field string {mustBeNonzeroLengthText, mustBeTextScalar} + options.configFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {}; + if isfield(options, 'configFile') + args{end+1} = "configFile"; + args{end+1} = options.configFile; + end + + config = mathworks.internal.adx.loadConfig(args{:}); + + if ~isfield(config, field) + value = string.empty; + else + value = string(config.(field)); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getIngestionResources.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getIngestionResources.m new file mode 100644 index 0000000..5ef80fa --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getIngestionResources.m @@ -0,0 +1,35 @@ +function irs = getIngestionResources(options) + % getIngestionResources Get queues and other values to do ingestion + % Returns a adx.data.models.IngestionResourcesSnapshot + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + % If cluster is set as an argument use it otherwise + % Management cluster will get a default + args = mathworks.utils.addArgs(options, ["cluster", "bearerToken"]); + managementClient = adx.data.api.Management(args{:}); + + % Error if the cluster is not set + if strlength(managementClient.cluster) > 0 + % Prepend the ingest- for this call if not present + if startsWith(managementClient.cluster, 'https://ingest-') + ingestCluster = managementClient.cluster; + else + ingestCluster = strrep(managementClient.cluster, 'https://', 'https://ingest-'); + end + else + error("adx:getIngestionResources", "Management Client cluster not set") + end + + [code, result, response] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get ingestion resources'), 'cluster', ingestCluster); %#ok + if code == matlab.net.http.StatusCode.OK + irs = adx.data.models.IngestionResourcesSnapshot(result); + else + error("adx:getIngestionResources", "Error getting Ingestion Resources") + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getKustoIdentityToken.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getKustoIdentityToken.m new file mode 100644 index 0000000..792b313 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getKustoIdentityToken.m @@ -0,0 +1,29 @@ +function identityToken = getKustoIdentityToken(options) + % getKustoIdentityToken Management query to request a Kusto Identity Token + % Query used is: .get kusto identity token + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.bearerToken string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {}; + if isfield(options, 'cluster') + args{end+1} = "cluster"; + args{end+1} = options.cluster; + end + if isfield(options, 'bearerToken') + args{end+1} = "bearerToken"; + args{end+1} = options.bearerToken; + end + managementClient = adx.data.api.Management(args{:}); + + [code, result, ~] = managementClient.managementRun(adx.data.models.ManagementRequest('csl', '.get kusto identity token')); + if code == matlab.net.http.StatusCode.OK + identityToken = mathworks.utils.jwt.JWT(result.Tables.Rows{1}); + else + error("adx:getKustoIdentityToken", "Error getting Identity token") + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowWithSchema.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowWithSchema.m new file mode 100644 index 0000000..c8f7f24 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowWithSchema.m @@ -0,0 +1,377 @@ +function row = getRowWithSchema(rowIdx, rowJSON, tableSchema, matlabSchema, kustoSchema, convertDynamics, nullPolicy, allowNullStrings) + % GETROWWITHSCHEMA Extract a row of data as a cell array from a JSON string using schemas + % For detail on dynamic values see: + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic + + % Copyright 2024 The MathWorks, Inc. + + arguments + rowIdx (1,1) int32 + rowJSON string {mustBeTextScalar, mustBeNonzeroLengthText} + tableSchema string + matlabSchema string + kustoSchema string + convertDynamics (1,1) logical + nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + allowNullStrings (1,1) logical = false + end + + numCols = numel(matlabSchema); + if numel(tableSchema) ~= numCols + error("adx:getRowWithSchema", "Size of Kusto schema: %d, does not match the MATLAB schema: %d", numel(kustoSchema), numCols); + end + if numel(kustoSchema) ~= numCols + error("adx:getRowWithSchema", "Size of Kusto schema: %d, does not match the MATLAB schema: %d", numel(kustoSchema), numCols); + end + json = com.google.gson.JsonParser().parse(rowJSON); + if json.size ~= numCols + error("adx:getRowWithSchema", "Size of JSON array: %d, does not match the MATLAB schema: %d", json.size, numCols); + end + + % The output will all be in a cell array to be assigned to a cell array row and later to a table + row = cell(1,numel(matlabSchema)); + + % Ensure input is always an array + if (~json.isJsonArray()) + j = com.google.gson.JsonArray(); + j.add(json); + json = j; + end + + for colIdx = 1:numCols + % Get the JSON value + curElement = json.get(colIdx-1); + switch lower(matlabSchema(colIdx)) + % Functions can also return missing/NaT/NaN + case "logical" + row{colIdx} = convert2Logical(curElement, nullPolicy, rowIdx, colIdx); + case "int32" + row{colIdx} = convert2Int32(curElement, nullPolicy, rowIdx, colIdx); + case "int64" + row{colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx); + case "double" + row{colIdx} = convert2Double(curElement, nullPolicy, rowIdx, colIdx); + case "string" + row{colIdx} = convert2String(curElement, kustoSchema(colIdx), nullPolicy, allowNullStrings, rowIdx, colIdx); + case "datetime" + row{colIdx} = convert2Datetime(curElement, nullPolicy, rowIdx, colIdx); + case "duration" + row{colIdx} = convert2Duration(curElement, nullPolicy, rowIdx, colIdx); + case "cell" + row{colIdx} = convert2Cell(curElement, kustoSchema(colIdx), convertDynamics, nullPolicy, rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected MATLAB schema type: %s", matlabSchema(colIdx)); + end + end +end + + +function val = convert2Cell(curElement, kustoSchema, convertDynamics, nullPolicy, rowIdx, colIdx) + if strcmpi(kustoSchema, "dynamic") + if convertDynamics + if curElement.isJsonPrimitive + if curElement.isBoolean + val = convert2Logical(curElement, nullPolicy); + elseif curElement.isNumber + val = convert2Double(curElement, nullPolicy); + elseif curElement.isString + try + charVal = char(curElement.getAsString); + if startsWith(charVal, "{") && endsWith(charVal, "}") + val = jsondecode(charVal); + else + % Add quotes that get removed by getAsString + val = jsondecode(['"', charVal, '"']); + end + catch + fprintf("Warning: Unable to jsondecode dynamic primitive value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.getAsString); + end + else + error("adx:getRowWithSchema", "Unexpected JSON primitive type, (%d,%d)", rowIdx, colIdx); + end + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny,(%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + if curElement.isEmpty + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)\n", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + try + val = jsondecode(char(curElement.toString)); + catch + fprintf("Warning: Unable to jsondecode dynamic array value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.toString); + end + end + elseif curElement.isJsonObject + try + val = jsondecode(char(curElement.toString)); + catch + fprintf("Warning: Unable to jsondecode dynamic object value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.toString); + end + else + error("adx:getRowWithSchema", "Unexpected JSON primitive type in dynamic, (%d,%d)", rowIdx, colIdx); + end + else + % Don't convert the dynamic value just pass the string + if curElement.isJsonArray || curElement.isJsonObject + val = char(curElement.toString); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + val = char(curElement.getAsString); + end + end + else + error("adx:getRowWithSchema", "Unexpected cell type in MATLAB schema for Kusto schema type: %s, (%d,%d)", kustoSchema, rowIdx, colIdx); + end +end + + +function val = convert2Logical(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + if curElement.getAsBoolean + val = 1; + else + val = 0; + end + else + val = curElement.getAsBoolean; + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowWithSchema", "Logical null values are not supported using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for a logical value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for a logical value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Int32(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + val = double(curElement.getAsInt); + else + % Will have been converted to a double from Javabut without + % loss, so convert back to an int32 + val = int32(curElement.getAsInt); + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowWithSchema", "int32 null values are not supported using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not support when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for an int32 value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for an int32 value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Int64(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + % Could do the conversion transparently or in Java + % using this approach for clarity for now + val = double(sscanf(string(curElement.toString()), "%ld")); + else + val = sscanf(string(curElement.toString()), "%ld"); + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowWithSchema", "int64 null values are not supported when using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for an int64 value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for an int64 value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Double(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = curElement.getAsDouble(); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = NaN; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for a double value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for a double value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2String(curElement, kustoSchema, nullPolicy, allowNullStrings, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = char(curElement.getAsString); + elseif curElement.isJsonNull + if strcmpi(kustoSchema, "guid") + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + if allowNullStrings + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = ""; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + % Should not get here + warning("adx:getRowWithSchema", 'ADX does not support null strings, allowNullStrings is false, null policy is not applied, returning: ""'); + val = ""; + end + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for a string value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for a string value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Datetime(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = convertString2Datetime(string(curElement.getAsString())); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = datetime(NaT, "TimeZone", "UTC"); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for a datetime value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for a datetime value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Duration(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = mathworks.internal.adx.timespanValue2duration(string(curElement.getAsString())); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = NaN; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowWithSchema", "JSON array not expect for a duration value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowWithSchema", "JSON object not expect for a duration value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function d = convertString2Datetime(dStr) + arguments + dStr string {mustBeNonzeroLengthText, mustBeTextScalar} + end + + % Match '0001-01-01T00:00:00Z' + baseP = digitsPattern(4) + "-" + digitsPattern(2) + "-" + digitsPattern(2) + "T" + digitsPattern(2) + ":" + digitsPattern(2) + ":" + digitsPattern(2); + secondPrescisionP = baseP + "Z"; + % Match '2023-01-06T14:36:22.4651963Z' + subSecondPrescisionP = baseP + "." + digitsPattern + "Z"; + + if matches(dStr, secondPrescisionP) + d = datetime(dStr, "InputFormat", 'yyyy-MM-dd''T''HH:mm:ssZ', "TimeZone", "UTC"); + elseif matches(dStr, subSecondPrescisionP) + dFields = split(dStr, "."); + numS = strlength(dFields(end)) - 1; % -1 to remove the Z + infmt = "yyyy-MM-dd'T'HH:mm:ss." + string(repmat('S', 1, numS)) + "Z"; + d = datetime(dStr, "InputFormat", infmt, "TimeZone", "UTC"); + else + error("adx:getRowWithSchema:convertString2Datetime", "Unexpected datetime format: %s", dStr); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowsWithSchema.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowsWithSchema.m new file mode 100644 index 0000000..e74cb0c --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getRowsWithSchema.m @@ -0,0 +1,459 @@ +function cArray = getRowsWithSchema(rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, nullPolicy, allowNullStrings, useParallel, parallelThreshold, verbose) + % GETROWSWITHSCHEMA Extract rows of data as a cell array from a JSON string using schemas + % For detail on dynamic values see: + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic + + % Copyright 2024 The MathWorks, Inc. + + arguments + rows string + tableSchema string + matlabSchema string + kustoSchema string + convertDynamics (1,1) logical + nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + allowNullStrings (1,1) logical = false + useParallel (1,1) logical = false + parallelThreshold (1,1) int32 = 1000; + verbose (1,1) logical = false + end + + numCols = numel(matlabSchema); + if numel(tableSchema) ~= numCols + error("adx:getRowsWithSchema", "Size of table schema: %d, does not match the MATLAB schema: %d", numel(tableSchema), numCols); + end + if numel(kustoSchema) ~= numCols + error("adx:getRowsWithSchema", "Size of Kusto schema: %d, does not match the MATLAB schema: %d", numel(kustoSchema), numCols); + end + + if numel(rows) > 1000 && verbose + showCount = true; + else + showCount = false; + end + + % The output will all be in a cell array to be assigned to a cell array row and later to a table + cArray = cell(numel(rows), numCols); + + if useParallel && numel(rows) >= parallelThreshold && ~isempty(ver('parallel')) + pool = gcp('nocreate'); + if isempty(pool) + pool = parpool('Processes'); + end + + if isa(pool, 'parallel.ThreadPool') + fprintf("Found a parpool which thread based, a process based pool is required, rows will be processed serially.\n"); + doParfor = false; + elseif isprop(pool,'Cluster') && isprop(pool.Cluster,'Profile') && strcmp(pool.Cluster.Profile, 'Processes') + doParfor = true; + else + fprintf("Found a parpool which is not process based, rows will be processed serially.\n"); + doParfor = false; + end + else + doParfor = false; + end + + if doParfor % TODO clean up code duplication + if showCount + fprintf("Processing: %d rows in parallel using: %d workers\n", numel(rows), pool.NumWorkers); + end + parfor rowIdx = 1:numel(rows) + + json = com.google.gson.JsonParser().parse(rows(rowIdx)); + if json.size ~= numCols + error("adx:getRowsWithSchema", "Size of JSON array: %d, does not match the MATLAB schema: %d, row: %d", json.size, numCols, rowIdx); + end + + % Ensure input is always an array + if (~json.isJsonArray()) + j = com.google.gson.JsonArray(); + j.add(json); + json = j; + end + + for colIdx = 1:numCols + % Get the JSON value + curElement = json.get(colIdx-1); + switch lower(matlabSchema(colIdx)) %#ok + % Functions can also return missing/NaT/NaN + case "logical" + cArray{rowIdx, colIdx} = convert2Logical(curElement, nullPolicy, rowIdx, colIdx); + case "int32" + cArray{rowIdx, colIdx} = convert2Int32(curElement, nullPolicy, rowIdx, colIdx); + case "int64" + cArray{rowIdx, colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx); + case "double" + cArray{rowIdx, colIdx} = convert2Double(curElement, nullPolicy, rowIdx, colIdx); + case "string" + cArray{rowIdx, colIdx} = convert2String(curElement, kustoSchema(colIdx), nullPolicy, allowNullStrings, rowIdx, colIdx); %#ok + case "datetime" + cArray{rowIdx, colIdx} = convert2Datetime(curElement, nullPolicy, rowIdx, colIdx); + case "duration" + cArray{rowIdx, colIdx} = convert2Duration(curElement, nullPolicy, rowIdx, colIdx); + case "cell" + cArray{rowIdx, colIdx} = convert2Cell(curElement, kustoSchema(colIdx), convertDynamics, nullPolicy, rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected MATLAB schema type: %s", matlabSchema(colIdx)); + end + end + end + + else + for rowIdx = 1:numel(rows) + % Some feed back for "big" queries + if showCount && mod(rowIdx, 500) == 0 + fprintf("Processing row: %d of %d\n", rowIdx, numel(rows)) + end + + json = com.google.gson.JsonParser().parse(rows(rowIdx)); + if json.size ~= numCols + error("adx:getRowsWithSchema", "Size of JSON array: %d, does not match the MATLAB schema: %d, row: %d", json.size, numCols, rowIdx); + end + + % Ensure input is always an array + if (~json.isJsonArray()) + j = com.google.gson.JsonArray(); + j.add(json); + json = j; + end + + for colIdx = 1:numCols + % Get the JSON value + curElement = json.get(colIdx-1); + switch lower(matlabSchema(colIdx)) + % Functions can also return missing/NaT/NaN + case "logical" + cArray{rowIdx, colIdx} = convert2Logical(curElement, nullPolicy, rowIdx, colIdx); + case "int32" + cArray{rowIdx, colIdx} = convert2Int32(curElement, nullPolicy, rowIdx, colIdx); + case "int64" + cArray{rowIdx, colIdx} = convert2Int64(curElement, nullPolicy, rowIdx, colIdx); + case "double" + cArray{rowIdx, colIdx} = convert2Double(curElement, nullPolicy, rowIdx, colIdx); + case "string" + cArray{rowIdx, colIdx} = convert2String(curElement, kustoSchema(colIdx), nullPolicy, allowNullStrings, rowIdx, colIdx); + case "datetime" + cArray{rowIdx, colIdx} = convert2Datetime(curElement, nullPolicy, rowIdx, colIdx); + case "duration" + cArray{rowIdx, colIdx} = convert2Duration(curElement, nullPolicy, rowIdx, colIdx); + case "cell" + cArray{rowIdx, colIdx} = convert2Cell(curElement, kustoSchema(colIdx), convertDynamics, nullPolicy, rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected MATLAB schema type: %s", matlabSchema(colIdx)); + end + end + end + end +end + + +function val = convert2Cell(curElement, kustoSchema, convertDynamics, nullPolicy, rowIdx, colIdx) + if strcmpi(kustoSchema, "dynamic") + if convertDynamics + if curElement.isJsonPrimitive + if curElement.isBoolean + val = convert2Logical(curElement, nullPolicy); + elseif curElement.isNumber + val = convert2Double(curElement, nullPolicy); + elseif curElement.isString + try + charVal = char(curElement.getAsString); + if startsWith(charVal, "{") && endsWith(charVal, "}") + val = jsondecode(charVal); + else + % Add quotes that get removed by getAsString + val = jsondecode(['"', charVal, '"']); + end + catch + fprintf("Warning: Unable to jsondecode dynamic primitive value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.getAsString); + end + else + error("adx:getRowsWithSchema", "Unexpected JSON primitive type, (%d,%d)", rowIdx, colIdx); + end + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny,(%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + if curElement.isEmpty + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)\n", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + try + val = jsondecode(char(curElement.toString)); + catch + fprintf("Warning: Unable to jsondecode dynamic array value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.toString); + end + end + elseif curElement.isJsonObject + try + val = jsondecode(char(curElement.toString)); + catch + fprintf("Warning: Unable to jsondecode dynamic object value, (%d,%d)\n", rowIdx, colIdx); + val = char(curElement.toString); + end + else + error("adx:getRowsWithSchema", "Unexpected JSON primitive type in dynamic, (%d,%d)", rowIdx, colIdx); + end + else + % Don't convert the dynamic value just pass the string + if curElement.isJsonArray || curElement.isJsonObject + val = char(curElement.toString); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + val = char(curElement.getAsString); + end + end + else + error("adx:getRowsWithSchema", "Unexpected cell type in MATLAB schema for Kusto schema type: %s, (%d,%d)", kustoSchema, rowIdx, colIdx); + end +end + + +function val = convert2Logical(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + if curElement.getAsBoolean + val = 1; + else + val = 0; + end + else + val = curElement.getAsBoolean; + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowsWithSchema", "Logical null values are not supported using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for a logical value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for a logical value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Int32(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + val = double(curElement.getAsInt); + else + % Will have been converted to a double from Javabut without + % loss, so convert back to an int32 + val = int32(curElement.getAsInt); + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowsWithSchema", "int32 null values are not supported using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not support when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for an int32 value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for an int32 value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Int64(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + if nullPolicy == mathworks.adx.NullPolicy.Convert2Double + % Could do the conversion transparently or in Java + % using this approach for clarity for now + val = double(sscanf(string(curElement.toString()), "%ld")); + else + val = sscanf(string(curElement.toString()), "%ld"); + end + elseif curElement.isJsonNull + switch nullPolicy + case mathworks.adx.NullPolicy.AllowAll + val = missing; + case mathworks.adx.NullPolicy.Convert2Double + val = NaN; + case mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + error("adx:getRowsWithSchema", "int64 null values are not supported when using: mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, consider using mathworks.adx.NullPolicy.AllowAll, (%d,%d)", rowIdx, colIdx); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for an int64 value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for an int64 value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Double(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = curElement.getAsDouble(); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = NaN; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for a double value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for a double value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2String(curElement, kustoSchema, nullPolicy, allowNullStrings, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = char(curElement.getAsString); + elseif curElement.isJsonNull + if strcmpi(kustoSchema, "guid") + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = missing; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + if allowNullStrings + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = ""; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + else + % Should not get here + warning("adx:getRowsWithSchema", 'ADX does not support null strings, allowNullStrings is false, null policy is not applied, returning: ""'); + val = ""; + end + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for a string value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for a string value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Datetime(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = convertString2Datetime(string(curElement.getAsString())); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = datetime(NaT, "TimeZone", "UTC"); + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for a datetime value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for a datetime value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function val = convert2Duration(curElement, nullPolicy, rowIdx, colIdx) + if curElement.isJsonPrimitive + val = mathworks.internal.adx.timespanValue2duration(string(curElement.getAsString())); + elseif curElement.isJsonNull + switch nullPolicy + case {mathworks.adx.NullPolicy.ErrorLogicalInt32Int64, mathworks.adx.NullPolicy.AllowAll, mathworks.adx.NullPolicy.Convert2Double} + val = NaN; + case mathworks.adx.NullPolicy.ErrorAny + error("adx:getRowsWithSchema", "Null values are not supported when using: mathworks.adx.NullPolicy.ErrorAny, (%d,%d)", rowIdx, colIdx); + otherwise + error("adx:getRowsWithSchema", "Unexpected NullPolicy: %s", nullPolicy); + end + elseif curElement.isJsonArray + error("adx:getRowsWithSchema", "JSON array not expect for a duration value, (%d,%d)", rowIdx, colIdx); + elseif curElement.isJsonObject + error("adx:getRowsWithSchema", "JSON object not expect for a duration value, (%d,%d)", rowIdx, colIdx); + else + error("adx:getRowsWithSchema", "Unexpected JSON element value, (%d,%d)", rowIdx, colIdx); + end +end + + +function d = convertString2Datetime(dStr) + arguments + dStr string {mustBeNonzeroLengthText, mustBeTextScalar} + end + + % Match '0001-01-01T00:00:00Z' + baseP = digitsPattern(4) + "-" + digitsPattern(2) + "-" + digitsPattern(2) + "T" + digitsPattern(2) + ":" + digitsPattern(2) + ":" + digitsPattern(2); + secondPrescisionP = baseP + "Z"; + % Match '2023-01-06T14:36:22.4651963Z' + subSecondPrescisionP = baseP + "." + digitsPattern + "Z"; + + if matches(dStr, secondPrescisionP) + d = datetime(dStr, "InputFormat", 'yyyy-MM-dd''T''HH:mm:ssZ', "TimeZone", "UTC"); + elseif matches(dStr, subSecondPrescisionP) + dFields = split(dStr, "."); + numS = strlength(dFields(end)) - 1; % -1 to remove the Z + infmt = "yyyy-MM-dd'T'HH:mm:ss." + string(repmat('S', 1, numS)) + "Z"; + d = datetime(dStr, "InputFormat", infmt, "TimeZone", "UTC"); + else + error("adx:getRowsWithSchema:convertString2Datetime", "Unexpected datetime format: %s", dStr); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableAndSchemas.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableAndSchemas.m new file mode 100644 index 0000000..a0b94c5 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableAndSchemas.m @@ -0,0 +1,116 @@ +function [mTable, tableSchema, matlabSchema, kustoSchema] = getTableAndSchemas(columns, numRows, options) + % getTableAndSchemas Returns a MATLAB table to store a returned Kusto table + % + % The table is not populated. + % Column names are mapped to valid MATLAB column names using matlab.lang.makeValidName + % Datatype schemas are also returned. + % MATLAB types mapped from the Kusto types using mathworks.internal.adx.mapTypesKustoToMATLAB + % + % Required Arguments + % columns: 1d array of adx.data.models.Column + % + % numRows: Number of rows in the table + % + % Optional Arguments + % name: Name for the table, the default is: "". matlab.lang.makeValidName is applied. + % + % nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + % Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + % + % verbose: Logical to enable additional output, default is false. + % + % Return Values: + % mTable: Unpopulated MATLAB table. + % + % matlabSchema: String array of the underlying MATLAB types for columns which + % may be stored in a cell to enable representation of nulls + % + % tableSchema: String array of the actual MATLAB column types used to create the table + % + % kustoSchema: String array of the Kusto type fields for the columns also + % stored in the table descriptions fields + + % Copyright 2024 The MathWorks, Inc. + + arguments + columns (1,:) % Should work with both adx.data.models.Column & adx.data.models.ColumnV1 as the V1 DataType field is not used + numRows (1,1) int64 + options.name (1,1) string = "" + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.verbose (1,1) logical = false + end + + if ~(isa(columns, 'adx.data.models.Column') || isa(columns, 'adx.data.models.ColumnV1')) + error("adx:getTableAndSchemas","Expected columns to be of type adx.data.models.Column or adx.data.models.ColumnV1"); + end + + numCols = numel(columns); + + % Create cell arrays to store the table properties + variableNames = cell(numCols, 1); + variableTypes = cell(numCols, 1); + matlabTypes = cell(numCols, 1); + variableDescriptions = cell(numCols, 1); + + for m = 1:numCols + variableNames{m} = char(matlab.lang.makeValidName(columns(m).ColumnName)); + matlabTypes{m} = mathworks.internal.adx.mapTypesKustoToMATLAB(columns(m).ColumnType); + switch options.nullPolicy + case mathworks.adx.NullPolicy.AllowAll + switch lower(matlabTypes{m}) + case {'int32', 'int64', 'logical'} + variableTypes{m} = 'cell'; + otherwise + variableTypes{m} = matlabTypes{m}; + end + case mathworks.adx.NullPolicy.Convert2Double + switch lower(matlabTypes{m}) + case {'int32', 'int64', 'logical'} + variableTypes{m} = 'double'; + otherwise + variableTypes{m} = matlabTypes{m}; + end + otherwise + variableTypes{m} = matlabTypes{m}; + end + variableDescriptions{m} = char(columns(m).ColumnType); + end + + % Create the MATLAB table, it is not populated with data + sz = [numRows, numCols]; + mTable = table('Size', sz, 'VariableTypes', variableTypes, 'VariableNames', variableNames); + mTable.Properties.Description = matlab.lang.makeValidName(options.name); + mTable.Properties.VariableDescriptions = variableDescriptions; + + % For all the datetime columns set them to UTC and flag this once per table + utcWarned = false; + for m = 1:width(mTable) + if strcmp(variableTypes{m}, "datetime") + if options.verbose && ~utcWarned; fprintf("Using UTC as timezone for datetimes\n"); end + mTable.(variableNames{m}).TimeZone = "UTC"; + utcWarned = true; + end + end + + % tableSchema is exactly the actual MATLAB column types used to create the table + if iscellstr(variableTypes) + tableSchema = string(variableTypes); + else + error("adx:getTableAndSchemas","Expected variableTypes to be of type string or char"); + end + + % matlabSchema is the underlying MATLAB type for columns which may be stored in a cell + % array to enable representation of null values. + if iscellstr(matlabTypes) + matlabSchema = string(matlabTypes); + else + error("adx:getTableAndSchemas","Expected matlabTypes to be of type string or char"); + end + + % kustoSchema is the Kusto type fields for the columns also stored in the table descriptions fields + if iscellstr(variableDescriptions) + kustoSchema = string(variableDescriptions); + else + error("adx:getTableAndSchemas","Expected variableDescriptions to be of type string or char"); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableSchema.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableSchema.m new file mode 100644 index 0000000..2e92bf8 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/getTableSchema.m @@ -0,0 +1,44 @@ +function [result, success, requestId] = getTableSchema(tableName, options) + % getTableSchema + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/show-table-schema-command + + % Copyright 2024 The MathWorks, Inc. + + arguments + tableName string {mustBeTextScalar, mustBeNonzeroLengthText} + options.JSONFormat (1,1) logical = false + options.database string {mustBeTextScalar, mustBeNonzeroLengthText} + options.cluster string {mustBeTextScalar, mustBeNonzeroLengthText} + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.scopes string + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = true + options.verbose (1,1) logical = false + end + + if options.JSONFormat + command = ".show table " + tableName + " schema as json"; + else + command = ".show table " + tableName + " cslschema"; + end + + args = mathworks.utils.addArgs(options, ["database", "cluster", "propertyNames", "propertyValues", "scopes", "convertDynamics", "nullPolicy", "allowNullStrings", "verbose"]); + + [cmdResult, cmdSuccess, requestId] = mathworks.adx.mgtCommand(command, args{:}); + + if ~cmdSuccess + result = ""; + success = false; + else + if height(cmdResult) > 0 && numel(cmdResult.Properties.VariableNames) >1 && strcmp(cmdResult.Properties.VariableNames{2}, 'Schema') + result = string(cmdResult{1,"Schema"}); + success = true; + else + result = ""; + success = false; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/int2IntOrLong.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/int2IntOrLong.m new file mode 100644 index 0000000..cce5d7e --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/int2IntOrLong.m @@ -0,0 +1,52 @@ +function literal = int2IntOrLong(value) + % int2IntOrLong Converts a MATLAB int to a Kusto int or long + % A scalar or empty input value must be provided. + % A scalar string is returned. + % If empty an int(null) or long(null) is returned. + % + % See also: + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/int + % https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/long + + % Copyright 2024 The MathWorks, Inc. + + arguments + value + end + + switch(class(value)) + case {"int8", "int16", "int32"} + if isempty(value) + literal = "int(null)"; + else + if ~isscalar(value) + error("adx:int2IntOrLong", "Expected a scalar or empty value"); + end + literal = sprintf("int(%d)", value); + end + + case {"uint8", "uint16", "uint32"} + if isempty(value) + literal = "int(null)"; + else + if ~isscalar(value) + error("adx:int2IntOrLong", "Expected a scalar or empty value"); + end + literal = sprintf("int(%u)", value); + end + + case {"int64"} + if isempty(value) + literal = "long(null)"; + else + if ~isscalar(value) + error("adx:int2IntOrLong", "Expected a scalar or empty value"); + end + literal = sprintf("long(%d)", value); + end + + otherwise + error("adx:int2IntOrLong", "Unsupported value type: %s", class(value)); + end +end + diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/isMappableMATLABToKusto.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/isMappableMATLABToKusto.m new file mode 100644 index 0000000..dec4223 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/isMappableMATLABToKusto.m @@ -0,0 +1,61 @@ +function tf = isMappableMATLABToKusto(matlabType, kustoType, options) + % isMappableMATLABToKusto Returns true if a MATLAB type can be converted to a given Kusto type + % + % The following mappings are supported: + % + % Kusto Type MATLAB Types + % ---------------------------------------------------- + % int int8, uint8, int16, uint16, int32 + % long int8, uint8, int16, uint16, int32, uint32, int64 + % string string char + % guid string char + % real double single + % decimal double single + % datetime datetime + % bool logical + % timespan duration + % dynamic See optional allowDynamic flag + % + % As dynamic datatype are "dynamic" the contents must be parsed to determine + % if the can be converted the optional named argument allowDynamic if true + % makes the assumption that a dynamic type will be convertible. + % The default value is true. False is a more conservative value. + + arguments + matlabType string {mustBeNonzeroLengthText, mustBeTextScalar} + kustoType string {mustBeNonzeroLengthText, mustBeTextScalar} + options.allowDynamic (1,1) logical = true + end + + matlabType = lower(matlabType); + + switch lower(kustoType) + case "int" + tf = any(matches(["int8", "uint8", "int16", "uint16", "int32"], matlabType)); + + case "long" + tf = any(matches(["int8", "uint8", "int16", "uint16", "int32", "uint32", "int64"], matlabType)); + + case {"string", "guid"} + tf = any(matches(["string", "char"], matlabType)); + + case {"real", "decimal"} + tf = any(matches(["double", "single"], matlabType)); + + case "datetime" + tf = strcmp("datetime", matlabType); + + case "bool" + tf = strcmp("logical", matlabType); + + case "timespan" + tf = strcmp("duration", matlabType); + + case "dynamic" % Generally JSON + tf = options.allowDynamic; + + otherwise + warning("adx:isMappableMATLABToKusto","Unexpected type found: %s, defaulting to conversion to a string if possible", kustoType); + tf = false; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/kustoSchemaToNamesAndTypes.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/kustoSchemaToNamesAndTypes.m new file mode 100644 index 0000000..8589a21 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/kustoSchemaToNamesAndTypes.m @@ -0,0 +1,28 @@ +function [names, types] = kustoSchemaToNamesAndTypes(kustoSchema, options) + % kustoSchemaToNamesAndTypes Splits a Kusto schema into string arrays of column names and types + + % Copyright 2024 The MathWorks, Inc. + + arguments + kustoSchema string {mustBeNonzeroLengthText} + options.JSONFormat (1,1) logical = false + options.verbose (1,1) logical = true + end + + if options.JSONFormat + error("adx:kustoSchemaToNamesAndTypes", "JSON format Schemas are not currently supported"); + end + + names = string.empty; + types = string.empty; + + pairs = split(kustoSchema, ","); + for n = 1:numel(pairs) + pair = split(pairs(n), ":"); + if numel(pair) ~= 2 + error("adx:kustoSchemaToNamesAndTypes", "Expected field to contain a ':' separated value pair: %s",pairs(n)); + end + names(end+1) = pair(1); %#ok + types(end+1) = pair(2); %#ok + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/loadConfig.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/loadConfig.m new file mode 100644 index 0000000..7465eb4 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/loadConfig.m @@ -0,0 +1,29 @@ +function config = loadConfig(options) + % LOADCONFIG Reads a config file if it exists + % + % Optional argument + % configFile: Path to JSON settings + + % Copyright 2023 The MathWorks, Inc. + + arguments + options.configFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + if isfield(options,"configFile") + configFile = options.configFile; + else + configFile = which("adx.Client.Settings.json"); + end + if ~isfile(configFile) + error("mathworks:internal:adx:loadConfig","configFile field not found: %s", configFile); + end + + try + config = jsondecode(fileread(configFile)); + catch ME + error("mathworks:internal:adx:loadConfig","Error decoding JSON file: %s, check JSON syntax\n Message: %s", configFile, ME.message); + end + + mathworks.internal.adx.validateConfig(config); +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/logical2Bool.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/logical2Bool.m new file mode 100644 index 0000000..77b9979 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/logical2Bool.m @@ -0,0 +1,26 @@ +function bool = logical2Bool(value) + % logical2Bool Converts a MATLAB logical to a Kusto bool + % A string is returned. + % If empty bool(null) is returned, otherwise bool(true) + % or bool false. + % A scalar or empty input value must be provided. + + % Copyright 2024 The MathWorks, Inc. + + arguments + value logical + end + + if isempty(value) + bool = "bool(null)"; + else + if ~isscalar(value) + error("adx:logical2Bool", "Expected a scalar or empty value"); + end + if value + bool = "bool(true)"; + else + bool = "bool(false)"; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesKustoToMATLAB.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesKustoToMATLAB.m new file mode 100644 index 0000000..27467ea --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesKustoToMATLAB.m @@ -0,0 +1,47 @@ +function outType = mapTypesKustoToMATLAB(inType) + % MAPTYPESKUSTOTOMATLAB Map Kusto datatypes to corresponding MATLAB type + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + % for .net mapping + + % Copyright 2023 The MathWorks, Inc. + + arguments + inType string {mustBeNonzeroLengthText, mustBeTextScalar} + end + + switch lower(inType) + case 'int' + outType = 'int32'; + + case 'long' + outType = 'int64'; + + case 'string' + outType = 'string'; + + case 'guid' + outType = 'string'; + + case 'real' + outType = 'double'; + + case 'datetime' + outType = 'datetime'; + + case 'dynamic' % Generally JSON + outType = 'cell'; + + case 'bool' + outType = 'logical'; + + case 'timespan' + outType = 'duration'; + + case 'decimal' + outType = 'double'; + + otherwise + warning("adx:mapTypesKustoToMATLAB","Unexpected type found: %s, defaulting to conversion to a string if possible", inType); + outType = 'string'; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesMATLABToKusto.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesMATLABToKusto.m new file mode 100644 index 0000000..b017053 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/mapTypesMATLABToKusto.m @@ -0,0 +1,38 @@ +function outType = mapTypesMATLABToKusto(inType) + % mapTypesMATLABToKusto Map MATLAB datatypes to corresponding Kusto type + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/ + % for .net mapping + + % Copyright 2023 The MathWorks, Inc. + + arguments + inType string {mustBeNonzeroLengthText, mustBeTextScalar} + end + + switch lower(inType) + case 'int32' + outType = 'int'; + + case 'int64' + outType = 'long'; + + case 'string' + outType = 'string'; + + case 'double' + outType = 'real'; + + case 'datetime' + outType = 'datetime'; + + case 'duration' + outType = 'timespan'; + + case 'logical' + outType = 'bool'; + + otherwise + warning("adx:mapTypesMATLABToKusto","Unexpected type found: %s, defaulting to conversion to a string if possible", inType); + outType = 'string'; + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV1Response2Tables.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV1Response2Tables.m new file mode 100644 index 0000000..759acef --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV1Response2Tables.m @@ -0,0 +1,140 @@ +function [primaryResult, responseTables] = queryV1Response2Tables(response, options) + % queryV1Response2Tables Convert a v1 API response to MATLAB tables + % + % Required argument + % response: A adx.data.models.QueryV1ResponseRaw as returned by queryRun(). + % + % Optional arguments + % nullPolicy: Enumeration to determine how null values should be handled. + % Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + % + % convertDynamics: Logical to determine if dynamic fields should be decoded + % from JSON. Default is true. + % + % allowNullStrings: Logical to allow null strings in input. Kusto does not + % store null strings but control command may return them. + % Default is false. + % + % useParallel: Logical to enable the use of Parallel Computing Toolbox if available + % + % parallelThreshold: Threshold for row number above which Parallel Computing + % Toolbox will be used, default is 1000. + % + % customRowDecoder: Function handle to a non default row conversion function + % Function is applied to the Primary Result table only. + % In certain unexpected states it is not applied. + % + % verbose: Logical to enable additional output, default is false. + % + % Return values + % primaryResult: The primary result as a MATLAB table. + % + % resultTables: The other returned tables as MATLAB tables. + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + response (1,1) adx.data.models.QueryV1ResponseRaw + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.convertDynamics (1,1) logical = true + options.allowNullStrings (1,1) logical = false + options.useParallel (1,1) logical = false + options.parallelThreshold (1,1) int32 = 1000; + options.customRowDecoder function_handle = function_handle.empty + options.verbose (1,1) logical = false; + end + + if ~isprop(response, 'Tables') + error("adx:queryV1Response2Tables","Expected Tables property not found"); + end + + if numel(response.Tables) == 0 + primaryResult = table.empty; % In case Primary result is not found + responseTables = {}; + warning("adx:queryV1Response2Tables", "No tables found in response"); + elseif numel(response.Tables) == 1 %#ok + % v1 can return 1 table + tableName = response.Tables(1).TableName; + primaryResult = decodeTable(true, tableName, response.Tables(1), options.nullPolicy, options.convertDynamics, options.allowNullStrings, options.useParallel, options.parallelThreshold, options.customRowDecoder, options.verbose); + responseTables = {}; + else + % The table of contents table should be the last one + % decode it to get the primary result + responseTables = {}; + toc = decodeTable(false, "Table of Contents", response.Tables(end), options.nullPolicy, options.convertDynamics, options.allowNullStrings, options.useParallel, options.parallelThreshold, function_handle.empty, options.verbose); + colNames = ["Ordinal", "Kind", "Name", "Id", "PrettyName"]; + % Pretty Name is not always present + varNames = toc.Properties.VariableNames; + if istable(toc) && any(contains(varNames, colNames(1))) && any(contains(varNames, colNames(2))) && any(contains(varNames, colNames(3))) && any(contains(varNames, colNames(4))) + primaryIdx = 0; + for n = 1:height(toc) + if strcmp(toc.Name(n), "PrimaryResult") + primaryIdx = toc.Ordinal(n)+1; + break; + end + end + % Should be a fatal error + if primaryIdx > numel(response.Tables) + error("adx:queryV1Response2Tables", "PrimaryResult index: %d, greater than the number of tables: %d", primaryIdx, numel(response.Tables)); + end + else + primaryIdx = 0; % An error state meaning that primary result was not found or the ToC is corrupt + warning("adx:queryV1Response2Tables", "Table of contents not as expected"); + end + + if primaryIdx == 0 + % return the first table as primary as a best effort + primaryResult = decodeTable(true, response.Tables(1).TableName, response.Tables(1), options.nullPolicy, options.convertDynamics, options.allowNullStrings, options.useParallel, options.parallelThreshold, function_handle.empty, options.verbose); + if options.verbose + fprintf("Warning: PrimaryResult not found in response, using first table\n"); + end + else + primaryResult = decodeTable(true, "PrimaryResult", response.Tables(primaryIdx), options.nullPolicy, options.convertDynamics, options.allowNullStrings, options.useParallel, options.parallelThreshold, options.customRowDecoder, options.verbose); + end + + for n = 1:numel(response.Tables)-1 % Skip the ToC table which should be last and is already decoded + if n ~= primaryIdx + tableName = string(toc.Name(n)); + responseTables{end+1} = decodeTable(false, tableName, response.Tables(n), options.nullPolicy, options.convertDynamics, options.allowNullStrings, options.useParallel, options.parallelThreshold, function_handle.empty, options.verbose); %#ok + end + end + responseTables{end+1} = toc; + end +end + + +function mTable = decodeTable(isPrimary, tableName, responseTable, nullPolicy, convertDynamics, allowNullStrings, useParallel, parallelThreshold, customRowDecoder, verbose) + numRows = numel(responseTable.Rows); + + % Create the unpopulated table and get the schemas + [mTable, tableSchema, matlabSchema, kustoSchema] = mathworks.internal.adx.getTableAndSchemas(responseTable.Columns, numRows, name=tableName, nullPolicy=nullPolicy, verbose=verbose); + + if isPrimary && ~isempty(customRowDecoder) + cArray = options.customRowDecoder(responseTables.rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, nullPolicy, allowNullStrings, useParallel, parallelThreshold, verbose); + else + % Default decoder using getRowsWithSchema + cArray = mathworks.internal.adx.getRowsWithSchema(responseTable.Rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, nullPolicy, allowNullStrings, useParallel, parallelThreshold, verbose); + end + + if height(cArray) ~= height(mTable) + error("adx:queryV1Response2Tables","Invalid number of decoded rows, expected: %d, found: %d", height(mTable), height(cArray)); + end + if width(cArray) ~= width(mTable) + error("adx:queryV1Response2Tables","Invalid number of decoded columns, expected: %d, found: %d", width(mTable), width(cArray)); + end + + if numRows > 10000 && verbose + disp("Formatting results"); + end + + % Assign the columns to the table, write cells without an extra layer of nesting + if height(cArray) > 0 + for m = 1:width(mTable) + if strcmp(tableSchema(m), "cell") + mTable{:,m} = cArray(:,m); + else + mTable(:,m) = cArray(:,m); + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV2Response2Tables.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV2Response2Tables.m new file mode 100644 index 0000000..4ebc88d --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/queryV2Response2Tables.m @@ -0,0 +1,453 @@ +function [primaryResult, resultTables, dataSetHeader, dataSetCompletion] = queryV2Response2Tables(v2Response, options) + % queryV2Response2Tables Converts a v2 API response to MATLAB tables + % + % Required Argument: + % v2Response: A adx.data.models.QueryV2ResponseRaw which been processed by JSONMapper + % + % Optional Arguments: + % convertDynamics: Logical to determine if Dynamic fields are decoded or not + % Default is true + % + % nullPolicy: A mathworks.adx.NullPolicy to determine how nulls are handled + % Default is mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + % + % allowNullStrings: Logical to allow null strings in input. Kusto does not + % store null strings but control command may return them. + % Default is false. + % customRowDecoder: Function handle to a non default row conversion function + % Function is applied to the Primary Result table only. + % In certain unexpected states it is not applied. + % + % useParallel: Logical to enable the use of Parallel Computing Toolbox if available + % + % parallelThreshold: Threshold for row number above which Parallel Computing + % Toolbox will be used, default is 1000. + % + % verbose: Logical to enable additional output, default is false + % + % Return Values: + % primaryResult: The primary result as a MATLAB table + % + % resultTables: The other returned tables as MATLAB tables. + % + % dataSetHeader: A adx.data.models.DataSetHeader describes the high-level properties + % of the returned data + % + % dataSetCompletion: A adx.data.models.DataSetCompletion indicates success and other + % properties of the query + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/response2 + + % Copyright 2023-2024 The MathWorks, Inc. + + arguments + v2Response adx.data.models.QueryV2ResponseRaw + options.convertDynamics (1,1) logical = true + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = false + options.customRowDecoder function_handle = function_handle.empty + options.useParallel (1,1) logical = false + options.parallelThreshold (1,1) int32 = 1000; + options.verbose (1,1) logical = false + end + + % Should be at least 3 frames if progressive or not + if numel(v2Response) < 3 + error("adx:queryV2Response2Tables","Expected at least 3 frames in the response, found: %d", numel(v2Response)); + end + + % Used if error or cancelled and return early + primaryResult = table.empty; + resultTables = {}; + + % Will store the resulting headers and tables + dataSetHeader = v2Response(1).getDataSetHeader(); + if options.verbose; printTableProps(dataSetHeader); end + + dataSetCompletion = v2Response(end).getDataSetCompletionFrame; + if options.verbose; printTableProps(dataSetCompletion); end + + if dataSetCompletion.HasErrors + fprintf("Error reported by Azure Data Explorer, skipping converting results to table\n"); + if isprop(dataSetCompletion, "OneApiErrors") && isstruct(dataSetCompletion.OneApiErrors) + if isfield(dataSetCompletion.OneApiErrors, "error") + fprintf("Error returned by Azure Data Explorer:\n"); + disp(dataSetCompletion.OneApiErrors.error); + else + fprintf("Expected OneApiErrors error field not found, unable to display error message\n"); + end + else + fprintf("Expected OneApiErrors property not found, unable to display error message\n"); + end + return; + end + + if dataSetCompletion.Cancelled + fprintf("Query cancelled, skipping converting results to table\n"); + return; + end + + + if dataSetHeader.IsProgressive + [progressSequence, progressIndex, tableHeader, tableFragment, tableProgress, dataTables] = populateProgressiveDataTables(v2Response, options.verbose); + args = {"nullPolicy", options.nullPolicy, "allowNullStrings", options.allowNullStrings,... + "useParallel", options.useParallel, "parallelThreshold", options.parallelThreshold,... + "customRowDecoder", options.customRowDecoder, "verbose", options.verbose}; + primaryResult = tableFromFragments(progressSequence, progressIndex, tableHeader, tableFragment, tableProgress, options.convertDynamics, args{:}); + resultTables = tablesFromDataTables(dataTables, options.convertDynamics, options.nullPolicy, verbose=options.verbose); + else + % There should be 1 DataTable for each Table in non progressive mode + dataTables = populateNonProgressiveDataTables(v2Response, options.verbose); + if isempty(dataTables) + error("adx:queryV2Response2Tables","No DataTable frame(s) found"); + end + [primaryResult, resultTables] = nonProgressiveMode(dataTables, options.convertDynamics, options.nullPolicy, options.allowNullStrings, options.useParallel, options.parallelThreshold, options.customRowDecoder, options.verbose); + end +end + + +function [progressSequence, progressIndex, tableHeader, tableFragment, tableProgress, dataTables] = populateProgressiveDataTables(v2Response, verbose) + tableHeader = adx.data.models.TableHeader.empty; + tableFragment = adx.data.models.TableFragment.empty; + tableProgress = adx.data.models.TableProgress.empty; + tableCompletion = adx.data.models.TableCompletion.empty; + dataTables = adx.data.models.DataTables; + progressSequence = string.empty; + progressIndex = int32.empty; + + for n = 2:numel(v2Response)-1 + if isprop(v2Response(n), 'FrameType') + switch (v2Response(n).FrameType) + case 'TableHeader' + tableHeader(end+1) = adx.data.models.TableHeader(... + 'TableId', v2Response(n).TableId,... + 'TableKind', v2Response(n).TableKind,... + 'TableName', v2Response(n).TableName,... + 'Columns', v2Response(n).Columns); %#ok + if numel(tableHeader) > 1 + warning("adx:queryV2Response2Tables","More than one TableHeader received") + end + if verbose; printTableProps(tableHeader(end)); end + + case 'TableFragment' + tableFragment(end+1) = adx.data.models.TableFragment(... + 'TableId', v2Response(n).TableId,... + 'FieldCount', v2Response(n).FieldCount,... + 'TableFragmentType', v2Response(n).TableFragmentType,... + 'Rows', v2Response(n).Rows); %#ok + if verbose; printTableProps(tableFragment(end)); end + progressSequence(end+1) = "Fragment"; %#ok + progressIndex(end+1) = numel(tableFragment); %#ok + + case 'TableProgress' + tableProgress(end+1) = adx.data.models.TableProgress(... + 'TableId', v2Response(n).TableId,... + 'TableProgress', v2Response(n).TableProgressProp); %#ok + if verbose; printTableProps(tableProgress(end)); end + progressSequence(end+1) = "Progress"; %#ok + progressIndex(end+1) = numel(tableProgress); %#ok + + case 'TableCompletion' + tableCompletion(end+1) = adx.data.models.TableCompletion(... + 'TableId', v2Response(n).TableId,... + 'RowCount', v2Response(n).RowCount); %#ok + if numel(tableHeader) > 1 + warning("adx:queryV2Response2Tables","More than one TableHeader received") + end + if verbose; printTableProps(tableCompletion(end)); end + + case 'DataTable' + dataTables.Tables(end+1) = adx.data.models.DataTable(... + 'TableId', v2Response(n).TableId,... + 'TableKind', v2Response(n).TableKind,... + 'TableName', v2Response(n).TableName,... + 'Columns', v2Response(n).Columns,... + 'Rows', v2Response(n).Rows); + if verbose; printTableProps(dataTables.Tables(end)); end + + otherwise + error("adx:queryV2Response2Tables","Unexpected FrameType: %s", v2Response(n).FrameType); + end + else + error("adx:queryV2Response2Tables","Expected frame: %d to have a FrameType property", n); + end + end +end + + +function dataTables = populateNonProgressiveDataTables(v2Response, verbose) + % Populate tables excl. header and completion 1st & last + dataTables = adx.data.models.DataTables; + for n = 2:numel(v2Response)-1 + if isprop(v2Response(n), 'FrameType') + if strcmpi(v2Response(n).FrameType, "datatable") + dataTables.Tables(end+1) = adx.data.models.DataTable(... + 'TableId', v2Response(n).TableId,... + 'TableKind', v2Response(n).TableKind,... + 'TableName', v2Response(n).TableName,... + 'Columns', v2Response(n).Columns,... + 'Rows', v2Response(n).Rows); + if verbose; printTableProps(dataTables.Tables(end)); end + else + error("adx:queryV2Response2Tables","Expected only DataTable between DataSetHeader & DataSetCompletion, found: %s", v2Response(end).FrameType); + end + else + error("adx:queryV2Response2Tables","Expected frame: %d to have a FrameType property", n); + end + end +end + + +function printTableProps(obj) + % printTableProps Print debug info for an object + arguments + obj (1,1) + end + + fprintf("%s\n", class(obj)); + propsList = properties(obj); + for n = 1:numel(propsList) + currProp = propsList{n}; + currObj = obj.(currProp); + if isnumeric(currObj) + if islogical(currObj) + fprintf(" %s: %s\n", currProp, string(currObj)); + elseif isa(currObj, 'double') + fprintf(" %s: %f\n", currProp, currObj); + else + fprintf(" %s: %d\n", currProp, currObj); + end + elseif isStringScalar(currObj) || ischar(currObj) + fprintf(" %s: %s\n", currProp, currObj); + elseif isenum(currObj) + fprintf(" %s: %s\n", currProp, string(currObj)); + elseif isa(currObj, "adx.data.models.Column") + fprintf(" %s #: %d\n", currProp, numel(currObj)); + elseif isa(currObj, "adx.data.models.Row") + fprintf(" %s #: %s\n", currProp, numel(currObj)); + else + fprintf(" %s: class: %s\n", currProp, class(currObj)); + end + end +end + + +function [mTable, matlabSchema, kustoSchema] = tableFromRowsAndColumns(rows, columns, convertDynamics, options) + % tableFromRowsAndColumns Creates a MATLAB table from Rows & Cols + % The schemas are returned as a string arrays + % The table contents are populated from the rows + + arguments + rows string + columns (1,:) adx.data.models.Column + convertDynamics (1,1) logical + options.name (1,1) string = "" + options.kind (1,1) adx.data.models.TableKind = adx.data.models.TableKind.Unknown + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.allowNullStrings (1,1) logical = false + options.useParallel (1,1) logical = false + options.verbose (1,1) logical = true + options.parallelThreshold (1,1) int32 = 1000; + options.customRowDecoder function_handle = function_handle.empty + end + + % Create the table and a cell array of the same size + [mTable, tableSchema, matlabSchema, kustoSchema] = mathworks.internal.adx.getTableAndSchemas(columns, numel(rows), name=options.name, nullPolicy=options.nullPolicy, verbose=options.verbose); + + if isfield(options, 'name') && eq(options.kind, adx.data.models.TableKind.PrimaryResult) && ~isempty(options.customRowDecoder) + cArray = options.customRowDecoder(rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, options.nullPolicy, options.allowNullStrings, options.useParallel, options.parallelThreshold, options.verbose); + else + % Default decoder using getRowsWithSchema + cArray = mathworks.internal.adx.getRowsWithSchema(rows, tableSchema, matlabSchema, kustoSchema, convertDynamics, options.nullPolicy, options.allowNullStrings, options.useParallel, options.parallelThreshold, options.verbose); + end + + if height(cArray) ~= height(mTable) + error("adx:queryV2Response2Tables","Invalid number of decoded rows, expected: %d, found: %d", height(mTable), height(cArray)); + end + if width(cArray) ~= width(mTable) + error("adx:queryV2Response2Tables","Invalid number of decoded columns, expected: %d, found: %d", width(mTable), width(cArray)); + end + + if numel(rows) > 10000 && options.verbose + disp("Formatting results"); + end + % Assign the columns to the table, write cells without an extra layer of nesting + % If rows was empty then cArray can be empty i.e. 0xN, return a 0xN table + if height(cArray) > 0 + for n = 1:width(mTable) + if strcmp(tableSchema(n), "cell") + mTable{:,n} = cArray(:,n); + else + mTable(:,n) = cArray(:,n); + end + end + end +end + + +function mTables = tablesFromDataTables(dataTables, convertDynamics, nullPolicy, options) + % tablesFromDataTables Creates a cell array of MATLAB tables from and array of dataTables + % Optionally prints some output. + arguments + dataTables (1,1) adx.data.models.DataTables + convertDynamics (1,1) logical + nullPolicy (1,1) mathworks.adx.NullPolicy + options.verbose (1,1) logical = false + end + + numTables = numel(dataTables.Tables); + mTables = cell(numTables, 1); + for n = 1:numTables + if options.verbose + fprintf("Converting DataTable\n"); + printTableProps(dataTables.Tables(n)) + end + [mTables{n}, ~] = tableFromRowsAndColumns(dataTables.Tables(n).Rows, dataTables.Tables(n).Columns, convertDynamics, name=dataTables.Tables(n).TableName, nullPolicy=nullPolicy, verbose=options.verbose); + end +end + + +function fragmentResult = tableFromFragments(progressSequence, progressIndex, tableHeader, tableFragment, tableProgress, convertDynamics, options) + % tableFromFragments + arguments + progressSequence string {mustBeNonzeroLengthText} + progressIndex int32 + tableHeader (1,1) adx.data.models.TableHeader + tableFragment adx.data.models.TableFragment + tableProgress (1,1) adx.data.models.TableProgress + convertDynamics (1,1) logical + options.allowNullStrings (1,1) logical = false + options.nullPolicy (1,1) mathworks.adx.NullPolicy = mathworks.adx.NullPolicy.ErrorLogicalInt32Int64 + options.useParallel (1,1) logical = false + options.parallelThreshold (1,1) int32 = 1000; + options.customRowDecoder function_handle = function_handle.empty + options.verbose (1,1) logical = false + end + + % tableFromFragments Uses Table Fragments to build a table + if options.verbose; fprintf("Creating fragment result table\n"); end + + % No point processing fragments that come before a replace fragment + % Loop through fragments and find the last fragment of type DataReplace + % Note the index as the effective starting point in the fragments table + startFragment = 1; + for n = 1:numel(tableFragment) + if tableFragment(n).TableFragmentType == adx.data.models.TableFragmentType.DataReplace + startFragment = n; + end + % This should match + if tableFragment(n).FieldCount ~= numel(tableHeader.Columns) + error("adx:queryV2Response2Tables","Mismatch in fieldcount: %d and column number: %d for fragment: %d", tableFragment(n).FieldCount, numel(tableHeader.Columns), n); + end + end + if options.verbose; fprintf("Start fragment: %d of: %d\n", startFragment, numel(tableFragment)); end + + % progressSequence & progressIndex are arrays that note the table type, + % fragment or progress in order and the corresponding index into the + % respective fragment or progress tables + if numel(progressSequence) ~= (numel(tableFragment) + numel(tableProgress)) + error("adx:queryV2Response2Tables","Number of fragment and progress tables mismatch"); + end + if numel(progressSequence) ~= numel(progressIndex) + error("adx:queryV2Response2Tables","Number of progressSequence and progressIndex mismatch"); + end + + % Count the number of Rows in the fragments post any DataReplace fragments + rowCount = 0; + for n = startFragment:numel(tableFragment) + rowCount = rowCount + numel(tableFragment(n).Rows); + end + + % Create an array to hold the consolidated fragments rows + rowsArray = strings(rowCount, 1); + offset=0; + for n = startFragment:numel(tableFragment) + rowsArray(offset+1:offset+numel(tableFragment(n).Rows)) = tableFragment(n).Rows(:); + offset = offset + numel(tableFragment(n).Rows); + end + + args = {"name", tableHeader.TableName, "kind", tableHeader.TableKind,... + "allowNullStrings", options.allowNullStrings, "nullPolicy", options.nullPolicy,... + "customRowDecoder", options.customRowDecoder,... + "useParallel", options.useParallel, "parallelThreshold" options.parallelThreshold}; + + [fragmentResult, ~] = tableFromRowsAndColumns(rowsArray, tableHeader.Columns, convertDynamics, args{:}); +end + + +function [result, resultTables] = nonProgressiveMode(dataTables, convertDynamics, nullPolicy, allowNullStrings, useParallel, parallelThreshold, customRowDecoder, verbose) + % nonProgressiveMode Convert DataTable frame(s) to table(s) + arguments + dataTables (1,1) adx.data.models.DataTables + convertDynamics (1,1) logical + nullPolicy (1,1) mathworks.adx.NullPolicy + allowNullStrings (1,1) logical + useParallel (1,1) logical + parallelThreshold (1,1) int32 + customRowDecoder function_handle + verbose (1,1) logical + end + + queryPropertiesFound = false; + primaryResultFound = false; + queryCompletionInformationFound = false; + resultTables = cell(numel(dataTables.Tables), 1); + primaryResultIndex = 0; + + if verbose; fprintf("Creating result table(s)\n"); end + if verbose; fprintf("Number of datatables: %d\n", numel(dataTables.Tables)); end + for n = 1:numel(dataTables.Tables) + if ~isprop(dataTables.Tables(n), 'Columns') + error("adx:queryV2Response2Tables","Columns not found in DataTable"); + end + if ~isprop(dataTables.Tables(n), 'Rows') + error("adx:queryV2Response2Tables","Rows not found in DataTable"); + end + % TODO check for multiple writes and missing properties + if dataTables.Tables(n).TableKind == adx.data.models.TableKind.QueryProperties + queryPropertiesFound = true; + if verbose; fprintf("QueryProperties table found\n"); end + end + if dataTables.Tables(n).TableKind == adx.data.models.TableKind.PrimaryResult + primaryResultFound = true; + primaryResultIndex = n; + if verbose; fprintf("Primary result found\n"); end + end + if dataTables.Tables(n).TableKind == adx.data.models.TableKind.QueryCompletionInformation + queryCompletionInformationFound = true; + if verbose; fprintf("Completion table found\n"); end + end + + args = {"nullPolicy", nullPolicy, "allowNullStrings", allowNullStrings, "useParallel", useParallel,... + "parallelThreshold", parallelThreshold, "verbose", verbose, "customRowDecoder", customRowDecoder,... + "name", dataTables.Tables(n).TableName, "kind", dataTables.Tables(n).TableKind}; + + resultTables{n} = tableFromRowsAndColumns(dataTables.Tables(n).Rows, dataTables.Tables(n).Columns, convertDynamics, args{:}); + end + + % The result we really want should always be in the second table + % otherwise return and empty table + if primaryResultIndex == 0 + warning("adx:queryV2Response2Tables","PrimaryResult table was not found returning an empty table"); + result = table; + else + if primaryResultIndex ~= 2 + if verbose; fprintf("primaryResultIndex not of expected value of 2: %d\n", primaryResultIndex); end + end + result = resultTables{primaryResultIndex}; + if ~istable(result) + warning("adx:queryV2Response2Tables","Returning a result which is not of type table"); + end + end + + % Check that the expected tables were found (non progressive case) + if ~queryPropertiesFound + warning("adx:queryV2Response2Tables","QueryProperties table not found"); + end + if ~primaryResultFound + warning("adx:queryV2Response2Tables","PrimaryResult table not found"); + end + if ~queryCompletionInformationFound + warning("adx:queryV2Response2Tables","QueryCompletionInformation table not found"); + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/setCustomQueryHeaders.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/setCustomQueryHeaders.m new file mode 100644 index 0000000..6d24879 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/setCustomQueryHeaders.m @@ -0,0 +1,30 @@ +function request = setCustomQueryHeaders(request, options) + % setCustomHeaders Sets custom header fields Query calls + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/request#request-headers + + % Copyright 2023 The MathWorks, Inc. + + arguments + request matlab.net.http.RequestMessage + options.id string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + % Set ADX specific headers, see: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/api/rest/request + wOpts = weboptions; + if isprop(wOpts, 'UserAgent') + userAgent = wOpts.UserAgent; + else + userAgent = ['MATLAB ', version]; + end + request.Header(end+1) = matlab.net.http.HeaderField('x-ms-app', userAgent); + request.Header(end+1) = matlab.net.http.HeaderField('x-ms-client-version', userAgent); + + userName = char(java.lang.System.getProperty("user.name")); + request.Header(end+1) = matlab.net.http.HeaderField('x-ms-user', userName); + request.Header(end+1) = matlab.net.http.HeaderField('x-ms-user-id', userName); + + if isfield(options, 'id') + request.Header(end+1) = matlab.net.http.HeaderField('x-ms-client-request-id', options.id); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/setDefaultConfigValue.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/setDefaultConfigValue.m new file mode 100644 index 0000000..3a2c226 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/setDefaultConfigValue.m @@ -0,0 +1,36 @@ +function setDefaultConfigValue(field, value, options) + % setDefaultConfigValue Sets a field in the config file + + % Copyright 2023 The MathWorks, Inc. + + arguments + field string {mustBeNonzeroLengthText, mustBeTextScalar} + value + options.configFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + args = {}; + if isfield(options, 'configFile') + args{end+1} = 'configFile'; + args{end+1} = options.configFile; + configFile = options.configFile; + else + configFile = which("adx.Client.Settings.json"); + end + if ~isfile(configFile) + error("mathworks:internal:adx:setDefaultConfigValue","configFile field not found: %s", configFile); + end + + config = mathworks.internal.adx.loadConfig(args{:}); + config.(field) = value; + + jsonStr = jsonencode(config, PrettyPrint=true); + + fid = fopen(configFile, 'w'); + if fid == -1 + error("mathworks:internal:adx:setDefaultConfigValue","Could not open configuration file: %s", configFile); + end + cleanup = onCleanup(@() fclose(fid)); + + fprintf(fid, "%s", jsonStr); +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanLiteral2duration.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanLiteral2duration.m new file mode 100644 index 0000000..00c5dcb --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanLiteral2duration.m @@ -0,0 +1,94 @@ +function result = timespanLiteral2duration(t) + % timespanLiteral2duration Converts a Kusto timespan value to a MATLAB duration + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan + + % Copyright 2024 The MathWorks, Inc. + + arguments + t string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + tin = t; % keep original for error messages + t = strip(t); % Remove stray spaces + + % TODO check if there is a single common format to allow an optimized + % short circuit path + + decP = digitsPattern + optionalPattern("." + digitsPattern); + daysP = decP + "d"; + hoursP = decP + "h"; + minutesP = decP + "m"; + secondsP = decP + "s"; + msP = decP + "ms"; + usP = decP + "microsecond"; + tickP = decP + "tick"; + timeP = "time(" + wildcardPattern(1, 100) + ")"; + + if matches(t, daysP) + t = strip(t, "right", "d"); + result = days(str2double(t)); + elseif matches(t, hoursP) + t = strip(t, "right", "h"); + result = hours(str2double(t)); + elseif matches(t, minutesP) + t = strip(t, "right", "m"); + result = minutes(str2double(t)); + elseif matches(t, secondsP) + t = strip(t, "right", "s"); + result = seconds(str2double(t)); + elseif matches(t, msP) + t = strip(t, "right", "s"); + t = strip(t, "right", "m"); + result = milliseconds(str2double(t)); + elseif matches(t, usP) + str = split(t, "microsecond"); + result = milliseconds(str2double(str(1))/1000); + elseif matches(t, tickP) + str = split(t, "tick"); + result = milliseconds(str2double(str(1))/10000); + elseif matches(t, timeP) + % Not clear is the dd hh mm fields should support decimal values as + % seconds does? + + % assume <= 100 white spaces otherwise something is probably broken + secondsP = "time(" + whitespacePattern(0,100) + decP + whitespacePattern(0,100) + "seconds" + whitespacePattern(0,100) + ")"; + daysP = "time(" + whitespacePattern(0,100) + decP + whitespacePattern(0,100) + ")"; + colonValP = digitsPattern + "." + digitsPattern + ":" + digitsPattern + ":" + decP; + colonP = "time(" + whitespacePattern(0,100) + colonValP + whitespacePattern(0,100) + ")"; + + if matches(t, secondsP) + str = extract(t, decP); + result = seconds(str2double(str)); + elseif matches(t, daysP) + str = extract(t, decP); + result = days(str2double(str)); + elseif matches(t, colonP) + str = extract(t, colonValP); + strFields = split(str, ":"); + if numel(strFields) ~= 3 + error("adx:timespanLiteral2duration", "Expected time value to have 3 colon separated fields, e.g.: time(0.12:34:56.7) : %s", str); + end + dhFields = split(strFields(1), "."); + if numel(dhFields) ~= 2 + error("adx:timespanLiteral2duration", "Expected time day.hour value to have 2 dot separated fields, e.g. time(0.12:34:56.7) : %s", str); + end + secondFields = split(strFields(3), "."); + infmt = "dd:hh:mm:ss"; + if numel(secondFields) > 1 + if strlength(secondFields(2)) > 0 + infmt = infmt + "."; + end + for n = 1:strlength(secondFields(2)) + infmt = infmt + "S"; + end + end + timeString = dhFields(1) + ":" + dhFields(2) + ":" + strFields(2) + ":" + strFields(3); + result = duration(timeString, 'InputFormat', infmt, 'Format', infmt); + else + error("adx:timespanLiteral2duration", "Could not convert timespan value to a duration: %s", tin); + end + else + error("adx:timespanLiteral2duration", "Could not convert timespan value to a duration: %s", tin); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanValue2duration.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanValue2duration.m new file mode 100644 index 0000000..9697de5 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/timespanValue2duration.m @@ -0,0 +1,47 @@ +function result = timespanValue2duration(t) + % timespanValue2duration Converts a timespan value to a MATALB duration + % + % See: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/timespan + + % Copyright 2024 The MathWorks, Inc. + + tin = t; % keep original for error messages + t = strip(t); % Remove stray spaces + + decP = digitsPattern + optionalPattern("." + digitsPattern); + % Match 2.00:00:00 + colonValP = digitsPattern + "." + digitsPattern + ":" + digitsPattern + ":" + decP; + % Match hh:mm:ss.SSSSSSS + hhmmssSSSSSSP = digitsPattern + ":" + digitsPattern + ":" + digitsPattern + "." + digitsPattern; + hhmmssP = digitsPattern + ":" + digitsPattern + ":" + digitsPattern; + + if matches(t, colonValP) + str = extract(t, colonValP); + strFields = split(str, ":"); + if numel(strFields) ~= 3 + error("adx:timespanValue2duration", "Expected time value to have 3 colon separated fields, e.g.: 0.12:34:56.7 : %s", str); + end + dhFields = split(strFields(1), "."); + if numel(dhFields) ~= 2 + error("adx:timespanValue2duration", "Expected time day.hour value to have 2 dot separated fields, e.g. 0.12:34:56.7 : %s", str); + end + secondFields = split(strFields(3), "."); + infmt = "dd:hh:mm:ss"; + if numel(secondFields) > 1 + if strlength(secondFields(2)) > 0 + infmt = infmt + "."; + end + for n = 1:strlength(secondFields(2)) + infmt = infmt + "S"; + end + end + timeString = dhFields(1) + ":" + dhFields(2) + ":" + strFields(2) + ":" + strFields(3); + result = duration(timeString, 'InputFormat', infmt, 'Format', infmt); + elseif matches(t, hhmmssSSSSSSP) + result = duration(t, 'InputFormat','hh:mm:ss.SSSSSSS', 'Format', 'hh:mm:ss.SSSSSSS'); + elseif matches(t, hhmmssP) + result = duration(t, 'InputFormat','hh:mm:ss', 'Format', 'hh:mm:ss'); + else + error("adx:timespanValue2duration:convertDuration", "Unexpected timespan value: %s", tin); + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/toDynamic.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/toDynamic.m new file mode 100644 index 0000000..e328861 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/toDynamic.m @@ -0,0 +1,32 @@ +function literal = toDynamic(value) + % toDynamic Creates a Kusto dynamic literal value + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/dynamic + + % Copyright 2024 The MathWorks, Inc. + + if isempty(value) + literal = "dynamic(null)"; + return; + end + + if isscalar(value) && numel(value)==1 + literal = "dynamic(" + mathworks.internal.adx.toKustoLiteral(value) ")"; + return + end + + if iscell(value) + if numel(value) == 0 + literal = "dynamic([])"; + else + literal = "dynamic(["; + for n = 1:numel(value) + literal = literal + mathworks.internal.adx.toKustoLiteral(value{n}); + if n < numel(value) + literal = literal + ","; + end + end + literal = literal + "])"; + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/toKustoLiteral.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/toKustoLiteral.m new file mode 100644 index 0000000..7f4e2a5 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/toKustoLiteral.m @@ -0,0 +1,32 @@ +function literal = toKustoLiteral(value) + % toKustoLiteral Converts a MATLAB value to a Kusto Literal + % Supports duration, logical, int, double, single, string, char, and + % datetime MATLAB input types. + % + % See also: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types + + % Copyright 2024 The MathWorks, Inc. + + switch(class(value)) + case "duration" + literal = mathworks.internal.adx.duration2Timespan(value); + + case "logical" + literal = mathworks.internal.adx.logical2Bool(value); + + case "int" + literal = mathworks.internal.adx.int2IntOrLong(value); + + case {"double", "single"} + literal = mathworks.internal.adx.doubleOrSingle2Real(value); + + case {"string", "char"} + literal = mathworks.internal.adx.charOrString2String(value); + + case "datetime" + literal = mathworks.internal.adx.datetime2datetime(value); + + otherwise + error("adx:toKustoLiteral", "Unsupported value type: %s", class(value)); + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+adx/validateConfig.m b/Software/MATLAB/app/system/+mathworks/+internal/+adx/validateConfig.m new file mode 100644 index 0000000..9aedb59 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+adx/validateConfig.m @@ -0,0 +1,20 @@ +function tf = validateConfig(config) + % VALIDATECONFIG Sanity checks configuration settings + + % Copyright 2023 The MathWorks, Inc. + + arguments + config struct + end + + tf = true; + + % TODO Add more config sanity checks + if isfield(config, 'cluster') + if ~(startsWith(config.cluster, 'https://')) + warning("mathworks:internal:adx:validateConfig", 'Expected cluster field to start with https:// - %s', config.cluster); + tf = false; + end + end +end + diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientCopyToBlobContainer.m b/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientCopyToBlobContainer.m new file mode 100644 index 0000000..14c5f72 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientCopyToBlobContainer.m @@ -0,0 +1,52 @@ + +function [blobUriWithSas, blobSize] = clientCopyToBlobContainer(ingestionResources, blobName, localFile) + % clientCopyToBlobContainer Copies a file to a blob for ingestion + % Uses MATLAB's built in copy file function. + + % See: G3200984 MATLAB copyfile requires list permissions which is not supported + % by the SAS returned by ADX + + % Copyright 2023 The MathWorks, Inc. + + arguments + ingestionResources + blobName string {mustBeTextScalar, mustBeNonzeroLengthText} + localFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + warning("adx:clientCopyToBlobContainer", "copyfile cannot currently be used with an ADX SAS"); + + if ~isfile(localFile) + error("adx:clientCopyToBlobContainer", "File name not found: %s", localFile); + end + + % Assume source and destination size is the same + dirInfo = dir(localFile); + blobSize = dirInfo.bytes; + + if ~isprop(ingestionResources, 'TempStorage') + error("adx:clientCopyToBlobContainer", "TempStorage name not found"); + else + containerURI = matlab.net.URI(ingestionResources.TempStorage(1)); + end + + sasToken = "?" + string(containerURI.EncodedQuery); + setenv("MW_WASB_SAS_TOKEN", sasToken); + cleanup = onCleanup(@() cleanupEnvVar("MW_WASB_SAS_TOKEN")); + destination = "wasbs://" + string(strip(containerURI.EncodedPath, "/")) + "@" + containerURI.EncodedAuthority + "/" + blobName; + blobUriWithSas = containerURI.Scheme + "://" + containerURI.EncodedAuthority + containerURI.EncodedPath + "/" + blobName + "?" + containerURI.EncodedQuery; + + [status,msg,msgID] = copyfile(localFile, destination); + if status ~= 1 + error("adx:clientCopyToBlobContainer","copyfile failed: msgID: %s, msg: %s", msgID, msg); + end +end + + +function cleanupEnvVar(varName) + if isMATLABReleaseOlderThan("R2022b") + setenv(varName, ""); + else + unsetenv(varName); + end +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientUploadToBlobContainer.m b/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientUploadToBlobContainer.m new file mode 100644 index 0000000..ae03f9f --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+blob/clientUploadToBlobContainer.m @@ -0,0 +1,29 @@ + +function [blobUriWithSas, blobSize] = clientUploadToBlobContainer(ingestionResources, blobName, localFile) + % clientUploadToBlobContainer Uploads a file to a blob for ingestion + % Uses Azure Services support package + + % Copyright 2023 The MathWorks, Inc. + + arguments + ingestionResources (1,1) adx.data.models.IngestionResourcesSnapshot + blobName string {mustBeTextScalar, mustBeNonzeroLengthText} + localFile string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + if ~isprop(ingestionResources, 'TempStorage') + error("adx:clientUploadToBlobContainer", "TempStorage name not found"); + else + containerURI = matlab.net.URI(ingestionResources.TempStorage(1)); + end + + blobContainerClientBuilder = azure.storage.blob.BlobContainerClientBuilder(); + blobContainerClientBuilder.sasToken(containerURI.EncodedQuery); + blobContainerClientBuilder.endpoint(strcat(containerURI.Scheme, "://", containerURI.EncodedAuthority, containerURI.EncodedPath)); + blobContainerClient = blobContainerClientBuilder.buildClient; + blobClient = blobContainerClient.getBlobClient(blobName); + blobClient.uploadFromFile(localFile, 'overwrite', true); + blobProperties = blobClient.getProperties(); + blobSize = blobProperties.getBlobSize(); + blobUriWithSas = strcat(blobClient.getBlobUrl(), "?", containerURI.EncodedQuery); +end diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+blob/sanitizeBlobName.m b/Software/MATLAB/app/system/+mathworks/+internal/+blob/sanitizeBlobName.m new file mode 100644 index 0000000..7bbf401 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+blob/sanitizeBlobName.m @@ -0,0 +1,13 @@ +function result = sanitizeBlobName(blobName) + % sanitizeBlobName Checks that a name complies with Blob name limits + + % Copyright 2023 The MathWorks, Inc. + + arguments + blobName string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + % TODO apply blob name restrictions + % blobName = lower(matlab.lang.makeValidName(['adxingesttemporaryblob',char(datetime('now'))],'ReplacementStyle','delete')); + result = blobName; +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+curl/adxCurlWrite.m b/Software/MATLAB/app/system/+mathworks/+internal/+curl/adxCurlWrite.m new file mode 100644 index 0000000..3f26ad7 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+curl/adxCurlWrite.m @@ -0,0 +1,238 @@ +function [tf, result, id] = adxCurlWrite(options) + % adxCurlWrite adx caller for mathworks.internal.curlWrite + % Inserts custom headers required by ADX. + % + % This function may be changed or removed in a future release without + % notice. currently only windows is supported. + % It is a Proof of Concept testing mechanism to enable TCP keep-alive + % Packets only, it should be avoided in production use. + % + % Arguments: + % clusterUrl: A cluster URL including https:// as scalar text if not provided + % an attempt will be made to read the value from adx.Client.Settings.json + % + % urlPath: Query URL path as scalar text, default: "/v1/rest/query" + % + % query: KQL query to execute as scalar text, default (for PoC purposes): + % "print mycol=""Hello World""" + % Alternatively a a file containing the complete Query body can be + % provided byt prefixing the file name with a "@" symbol as + % normal in curl command syntax. + % When the JSON body for the query is constructed only the csl + % and db fields are populated, if further properties are + % required then the JSON body should be provided in its + % entirety as described above + % + % bearerToken: A bearerToken as scalar text if not provided an attempt will + % be made to read the value from adx.Client.Settings.json + % + % id: Request id header value as scalar text, if not provided a UUID is created + % + % + % skipJSONDecode: A logical to determine if JSON is decode using MATLAB's + % jsondecode or not, default is true + % + % propertyNames: Property names to be applies to the query, specified as a + % string array + % + % propertyValues: Property values that correspond the propertyNames, specified + % as a cell array + % + % verbose: A logical to enable additional feedback, default is true + % WARNING: verbose output will display the bearer token + % + % + % Returned values: + % tf: Logical that indicates if a HTTP status 200 was returned + % + % result: Result of the query as a string or a decoded JSON struct + % In certain error cases an empty struct is returned + % + % id: Request Id + % + % + % Examples: + % + % If called with no arguments with a adx.Client.Settings.json file + % present containing a valid bearer token the query: print mycol='Hello World' + % should run, returning a logical true, populated result struct and + % request UUID: + % + % [tf, result, id] = mathworks.internal.curl.adxCurlWrite() + % + % + % Provide key arguments: + % + % clusterUrl = "https://mycluster.westeurope.kusto.windows.net"; + % query = 'print mycol="Hello World"'; + % bearerToken = "eyJ0ec1RuQ"; + % [tf, result, id] = mathworks.internal.adxCurlWrite(clusterUrl=clusterUrl, bearerToken=bearerToken, query=query, verbose=true) + % + % + % Convert the primary result to a MATLAB table + % Assumes the url path is specifying a v1 API, as per default: + % + % [tf, result, id] = mathworks.internal.curl.adxCurlWrite(skipJSONDecode=true); + % [primaryResult, resultTables] = mathworks.internal.adx.queryV1Response2Tables(result); + % + % + % Set sample request properties & convert to a MATLAB table: + % + % propertyNames = {"notruncation", "query_datetimescope_column", "servertimeout"}; + % tenMinDuration = minutes(10); + % propertyValues = {true, "mycol", tenMinDuration}; + % [tf,result,id] = mathworks.internal.curl.adxCurlWrite(verbose=true, propertyNames=propertyNames, propertyValues=propertyValues, skipJSONDecode=true) + % [primaryResult, ~] = mathworks.internal.adx.queryV1Response2Tables(result) + + % Copyright 2024 The MathWorks + + arguments + options.clusterUrl string {mustBeTextScalar} = "" + options.urlPath string {mustBeTextScalar} = "/v1/rest/query" + options.database string {mustBeTextScalar} = "" + options.query string {mustBeTextScalar} = "print mycol='Hello World'" % For PoC testing + options.bearerToken string {mustBeTextScalar} = "" + options.id string {mustBeTextScalar} = mathworks.utils.UUID + options.skipJSONDecode (1,1) logical = false + options.propertyNames (1,:) string {mustBeNonzeroLengthText} + options.propertyValues (1,:) cell + options.verbose (1,1) logical = false + end + + if isfield(options, "propertyNames") && isfield(options, "propertyValues") + if numel(options.propertyNames) ~= numel(options.propertyValues) + error("adx:adxCurlWrite", "The number of propertyNames and propertyValues must match"); + else + if options.verbose; fprintf("Applying properties\n"); end + applyProperties = true; + end + else + applyProperties = false; + end + + id = options.id; + headersCell = {'x-ms-client-request-id', char(options.id)}; + + userName = char(java.lang.System.getProperty("user.name")); + headersCell(end+1,:) = {'x-ms-user', userName}; + headersCell(end+1,:) = {'x-ms-user-id', userName}; + + tmpWebOptions = weboptions; + headersCell(end+1,:) = {'x-ms-app', tmpWebOptions.UserAgent}; + headersCell(end+1,:) = {'x-ms-client-version', tmpWebOptions.UserAgent}; + + % Use a query object to get the default cluster + if strlength(options.clusterUrl) == 0 + queryObj = adx.data.api.Query(); + clusterUrl = queryObj.cluster; + else + clusterUrl = options.clusterUrl; + end + clusterUrl = string(strip(clusterUrl, 'right', '/')); + urlWithPath = clusterUrl + options.urlPath; + + if strlength(options.bearerToken) > 0 + bearerToken = options.bearerToken; + else + uri = matlab.net.URI(urlWithPath); + cluster = uri.Scheme + "://" + uri.Host; + queryObj = adx.data.api.Query("cluster", cluster); + if isprop(queryObj, 'dataBearerToken') + bearerToken = queryObj.dataBearerToken; + else + error("adx:adxCurlWrite", "Cached Bearer Token or bearerToken argument not found.\nRunning a trivial query e.g.:\n mathworks.adx.run('print mycol=""Hello World""')\nwill cache a fresh cache a token"); + end + end + + try + jwt = mathworks.utils.jwt.JWT(bearerToken); + catch ME + error("adx:adxCurlWrite", "Bearer token is not a valid JWT\nMessage: %s", ME.message); + end + if ~jwt.isTimeValid + error("adx:adxCurlWrite", "Cached Bearer Token or bearerToken argument is either not valid yet or expired, running a trivial query e.g.:\n mathworks.adx.run('print mycol=""Hello World""')\nwill cache a fresh token"); + end + bearerField = ['Bearer ', char(bearerToken)]; + headersCell(end+1,:) = {'Authorization', bearerField}; + + % Build up a basic query request e.g.: '{"csl":"print mycol='Hello World'","db":"unittestdb"}' + if startsWith(options.query, "@") + qFields = split(options.query, "@"); + dataFilename = qFields(2); + else + % Use a query object to get the default cluster + if strlength(options.database) == 0 + queryObj = adx.data.api.Query(); + database = queryObj.database; + else + database = options.database; + end + + % Build up a request object + request = adx.data.models.QueryRequest(); + request.csl = options.query; + request.db = database; + if applyProperties + crpo = adx.data.models.ClientRequestPropertiesOptions; + for n = 1:numel(options.propertyNames) + if isprop(crpo, options.propertyNames(n)) + try + if options.verbose; fprintf("Setting property: %s\n", options.propertyNames(n)); end + crpo.(options.propertyNames(n)) = options.propertyValues{n}; + catch exception + fprintf("Assignment failure for: %s, property class: %s, value class: %s",... + options.propertyNames(n), class(crpo.(options.propertyNames(n))), class(options.propertyValues{n})); + rethrow(exception); + end + else + error("adx:adxCurlWrite", "adx.data.models.ClientRequestPropertiesOptions does not have a property named: %s", options.propertyNames(n)); + end + end + crp = adx.data.models.ClientRequestProperties(); + crp.Options = crpo; + request.requestProperties = crp; + end + + % Convert to JSON using JSONMapper + data = request.jsonencode(); + + % Not using the shell for the payload so don't escape + % Escape " & | in the JSON, required by Windows shell + % data = strrep(data, '"', '\"'); + % data = strrep(data, '|', '^|'); + dataFilename = tempname; + if options.verbose + fprintf("Writing query body data to a curl input file:\n%s\n\n", data); + end + fileID = fopen(dataFilename, 'w'); + fprintf(fileID,'%s', data); + fclose(fileID); + % Delete the temp input file on cleanup, if it exists + cleanup = onCleanup(@() doCleanup(dataFilename)); + end + + if ~isfile(dataFilename) + error("adx:adxCurlWrite", "Data/query file not found: %s", dataFilename); + end + + headersCell(end+1,:) = {'Connection', 'Keep-Alive'}; + headersCell(end+1,:) = {'Expect', '100-continue'}; + + webOpts = weboptions('HeaderFields', headersCell); + webOpts.ContentType = "json"; + webOpts.MediaType = "application/json;charset=utf-8"; + + [tf, result] = mathworks.internal.curl.curlWrite(matlab.net.URI(urlWithPath), dataFilename, webOpts, options.verbose, skipJSONDecode=options.skipJSONDecode); +end + + +function doCleanup(filename) + % doCleanup Delete the temporary output file if it exists + arguments + filename string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + if isfile(filename) + delete(filename); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/+curl/curlWrite.m b/Software/MATLAB/app/system/+mathworks/+internal/+curl/curlWrite.m new file mode 100644 index 0000000..5509faa --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/+curl/curlWrite.m @@ -0,0 +1,260 @@ +function [tf, result] = curlWrite(url, dataFilename, webOpts, verbose, options) + % curlWrite webwrite like functionality via curl PoC implementation + % This function may be changed or removed in a future release without + % notice. Currently only windows is supported. + % Currently only the HTTP POST method is supported. + % This function is provided as a testing mechanism for TCP keep-alive + % Packets. + % + % Required Arguments + % + % url: A MATLAB.net.URI containing the host to connect to an any + % required path elements e.g.: + % matlab.net.URI("https://myhost.example.com:1234/path1/path2") + % + % dataFilename: A scalar text value for a filename containing the JSON + % request body payload to send to the endpoint. + % + % webOpts: A weboptions object. Used to configure curl arguments. + % NB: This value is currently required but NOT yet used. + % + % Optional Positional Argument + % + % verbose: A logical in enable or disable increased logging + % Default is true + % + % Optional Named Arguments + % + % keepaliveTime: An integer number of seconds after which to send a + % keep-alive packet. Default is 60. + % + % additionalArguments: A string array of extra arguments to be appended to + % the generated curl command. Prefix and postfix padding + % will be added. + % + % skipJSONDecode: A logical to skip decoding returned JSON and just + % return a scalar character vector. Default is false. + % + % Return Value: + % + % Response: Decoded JSON or a character vector containing the returned JSON + % See: skipJSONDecode. + % + % Example: + % + % result = mathworks.internal.curl.curlWrite(matlab.net.URI("https://httpbin.org/post"), "", weboptions, true) + % + % See also: mathworks.internal.curl.adxCurlWrite + + % Copyright 2024 The MathWorks + + arguments + url (1,1) matlab.net.URI + dataFilename string {mustBeTextScalar, mustBeNonzeroLengthText} + webOpts (1,1) weboptions + verbose (1,1) logical = true + options.keepaliveTime (1,1) int32 = 60 + options.additionalArguments string = "" + options.skipJSONDecode logical = false + end + + if ismac + % test equivalent of Linux and macOS curl for Linux, it should work - TODO + warning("MATHWORKS:curlWrite", "curlWrite is currently tests only Windows & Linux platforms"); + end + + if ispc + cmd = "curl.exe "; + else + cmd = "curl "; + end + + minusD = "--data ""@" + dataFilename + """ "; + + % Write the output to a file and read that back to avoid limits and noise in shell output + oFilename = string(tempname); + oFile = "--output """ + oFilename + """ "; + + % This is not an option in webwrite or matlab.net.http + minusKeepaliveTime = sprintf("--keepalive-time %d ", options.keepaliveTime); + + % Include the path as well, not just the host + minusUrl = "--url """ + url.EncodedURI + """ "; + + % Used to get status + minusV = "--verbose "; + + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Handle weboptions properties + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if isprop(webOpts, 'UserAgent') + minusUserAgent = "--user-agent """ + string(webOpts.UserAgent) + """ "; + else + minusUserAgent = "--user-agent """ + string(['MATLAB ', version]) + """ "; + end + + % Use the same default as webwrite, 5 seconds + if isprop(webOpts, 'Timeout') + if ~isempty(webOpts.Timeout) && webOpts.Timeout > 0 + minusConnectTimeout = "--connect-timeout " + string(num2str(webOpts.Timeout)) + " "; + else + minusConnectTimeout = "--connect-timeout 5 "; + end + else + minusConnectTimeout = "--connect-timeout 5 "; + end + + % Assume application JSON + if isprop(webOpts, 'ContentType') + if strcmp(webOpts.ContentType, 'auto') || strcmp(webOpts.ContentType, 'json') + minusAccept = "--header ""Accept:application/json; charset=utf-8"" "; + else + minusAccept = "--header ""Accept:" + string(webOpts.ContentType) + """ "; + end + else + minusAccept = "--header ""Accept:application/json; charset=utf-8"" "; + end + + % Default for webwrite is POST + if isprop(webOpts, 'RequestMethod') + if strcmp(webOpts.RequestMethod, 'auto') || strcmpi(webOpts.RequestMethod, 'POST') + minusRequest = "--request POST "; + else + error("MATHWORKS:curlWrite", "Only the POST method is currently supported"); + end + else + minusRequest = "--request POST "; + end + + % Only support JSON for now + if isprop(webOpts, 'MediaType') + if strcmp(webOpts.MediaType, 'auto') || strcmpi(webOpts.MediaType, 'json') || startsWith(webOpts.MediaType, "application/json") + minusContentType = "--header ""Content-Type:application/json;charset=utf-8"" "; + else + minusContentType = "--header ""Content-Type:" + string(webOpts.MediaType) + """ "; + end + else + minusContentType = "--header ""Content-Type:application/json;charset=utf-8"" "; + end + + % Don't handle CertificateFilename for now + if isprop(webOpts, "CertificateFilename") + if ~strcmp(webOpts.CertificateFilename, 'default') + error("MATHWORKS:curlWrite", "Setting a custom CertificateFilename is not currently supported"); + end + end + + % Don't handle KeyName for now + if isprop(webOpts, "KeyName") + if ~strcmp(webOpts.KeyName, '') + error("MATHWORKS:curlWrite", "Setting a custom KeyName is not currently supported"); + end + end + + % Don't handle KeyValue for now + if isprop(webOpts, "KeyValue") + if ~strcmp(webOpts.KeyValue, '') + error("MATHWORKS:curlWrite", "Setting a custom KeyValue is not currently supported"); + end + end + + % Don't handle ContentReader for now + if isprop(webOpts, "ContentReader") + if ~isempty(webOpts.ContentReader) + error("MATHWORKS:curlWrite", "Setting a custom ContentReader is not currently supported"); + end + end + + % Don't handle ArrayFormat for now + if isprop(webOpts, "ArrayFormat") + if ~strcmp(webOpts.ArrayFormat, 'csv') % Default value is 'csv' + error("MATHWORKS:curlWrite", "Setting a custom ArrayFormat is not currently supported"); + end + end + + % Apply web opts custom headers + if isprop(webOpts, "HeaderFields") + minusWebOptsHeaders = ""; + for n = 1:height(webOpts.HeaderFields) + kv = webOpts.HeaderFields(n,1:2); % Get 2 values + minusWebOptsHeaders = minusWebOptsHeaders + "--header " + """"+ string(kv{1}) + ":" + string(kv{2}) + """" + " "; + end + else + minusWebOptsHeaders = ""; + end + + % MATLAB uses 1.1 by default so match it for consistency + minusHTTPVer = "--http1.1 "; + + command = cmd + minusHTTPVer + minusUrl + minusD + minusRequest + oFile + minusKeepaliveTime + minusContentType + minusAccept + minusV + minusUserAgent + minusConnectTimeout + minusWebOptsHeaders; + + % Pass arbitrary additional arguments, pad with spaces + for n = 1:numel(options.additionalArguments) + command = command + " " + options.additionalArguments(n); + end + command = strip(command); + + % TODO test need to unset DYLD_LIBRARY_PATH on macOS + if isunix && ~ismac + command = "unset LD_LIBRARY_PATH; " + command; + end + + if verbose + fprintf("Running: %s\n", command); + end + + % Delete the output file on cleanup, if it exists + cleanup = onCleanup(@() doCleanup(oFilename)); + + [cmdStatus, cmdout] = system(command); + + % Will display the bearer token + if verbose + disp(cmdout); + end + + % Curl seems to return 0 in most cases, so it is not that useful + if cmdStatus ~= 0 + fprintf("Error running: %s\nStatus: %d\nOutput: %s\n", command, cmdStatus, cmdout); + tf = false; + result = struct; + else + + % If HTTP 200 is found return true + tf = contains(cmdout, "< HTTP/1.1 200"); + + if tf + % Read back the output and return it decoded by default + if isfile(oFilename) + if options.skipJSONDecode + result = fileread(oFilename); + else + try + outputText = fileread(oFilename); + result = jsondecode(outputText); + catch ME + fprintf("Unable to jsondecode output, message: %s\nOutput:\n%s", ME.message, outputText); + result = struct; + end + end + else + error("MATHWORKS:curlWrite", "Output file not found: %s", oFilename); + end + else + result = struct; + end + end +end + + +function doCleanup(filename) + % doCleanup Delete the temporary output file if it exists + arguments + filename string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + if isfile(filename) + delete(filename); + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+internal/countDown.m b/Software/MATLAB/app/system/+mathworks/+internal/countDown.m new file mode 100644 index 0000000..b643bd9 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+internal/countDown.m @@ -0,0 +1,18 @@ +function countDown(wait) + % countDown displays a countDown of wait seconds + + % Copyright 2023 The MathWorks, Inc. + + arguments + wait int32 {mustBeNonnegative, mustBeReal, mustBeFinite, mustBeNonNan} + end + + for n = 1:wait + fprintf("%d ", wait - n + 1); + pause(1); + if mod(n, wait) == 0 && n ~= wait + fprintf("\n"); + end + end + fprintf("\n"); +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+utils/+jwt/ClaimsJM.m b/Software/MATLAB/app/system/+mathworks/+utils/+jwt/ClaimsJM.m new file mode 100644 index 0000000..4a0dc5c --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+utils/+jwt/ClaimsJM.m @@ -0,0 +1,29 @@ +classdef ClaimsJM < adx.control.JSONMapper + % ClaimsJM JWT Claims that use JSON Mapper + + % Copyright 2023 The MathWorks, Inc. + + % Class properties + properties + iat int64 + nbf int64 + exp int64 + xms_tcdt int64 + end + + % Class methods + methods + % Constructor + function obj = ClaimsJM(s,inputs) + % To allow proper nesting of object, derived objects must + % call the JSONMapper constructor from their constructor. This + % also allows objects to be instantiated with Name-Value pairs + % as inputs to set properties to specified values. + arguments + s { adx.control.JSONMapper.ConstructorArgument } = [] + inputs.?mathworks.utils.jwt.ClaimsJM + end + obj@adx.control.JSONMapper(s,inputs); + end + end %methods +end diff --git a/Software/MATLAB/app/system/+mathworks/+utils/+jwt/JWT.m b/Software/MATLAB/app/system/+mathworks/+utils/+jwt/JWT.m new file mode 100644 index 0000000..8f80c97 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+utils/+jwt/JWT.m @@ -0,0 +1,94 @@ +classdef JWT + % JWT Represent a Java Web Token + % All times as assumed to be UTC + % + % This is not a generic JWT interface and is intended for use with + % Azure Data Explorer only at this point. + + % Copyright 2023 The MathWorks, Inc. + + properties + header struct + claims struct + signature string + token string + end + + methods + function obj = JWT(token) + % JWT Create a JWT object from a token string + arguments + token string {mustBeTextScalar} + end + obj.token = token; + + parts = split(token,'.'); + if numel(parts) < 3 + error("JWT:JWT", "Expected a JWT with at least 3 '.' separated fields"); + end + header = char(matlab.net.base64decode(parts{1})); + claims = char(matlab.net.base64decode(parts{2})); + obj.signature = parts{3}; + + header = strip(header, char(uint8(0))); + claims = strip(claims, char(uint8(0))); + + obj.header = jsondecode(header); + claimsJM = mathworks.utils.jwt.ClaimsJM(claims); + claimsJSON = jsondecode(claims); + + claimsJMprops = properties(claimsJM); + for n = 1:numel(claimsJMprops) + if isfield(claimsJSON, claimsJMprops{n}) + claimsJSON.(claimsJMprops{n}) = claimsJM.(claimsJMprops{n}); + end + end + obj.claims = claimsJSON; + end + + + function tf = isTimeValid(obj) + if ~isfield(obj.claims, 'nbf') + error("JWT:isTimeValid", "Expected nbf field not found"); + end + if ~isfield(obj.claims, 'exp') + error("JWT:isTimeValid", "Expected exp field not found"); + end + + pt = posixtime(datetime('now','TimeZone', 'UTC')); + if pt > obj.claims.nbf && pt < obj.claims.exp + tf = true; + else + tf = false; + end + end + + + function exp = expiryTime(obj) + if ~isfield(obj.claims, 'exp') + error("JWT:expiryTime", "Expected exp field not found"); + end + exp = datetime(obj.claims.exp, 'ConvertFrom', 'posixtime', 'TimeZone', 'UTC'); + end + + + function nbf = notBeforeTime(obj) + if ~isfield(obj.claims, 'nbf') + error("JWT:notBeforeTime", "Expected nbf field not found"); + end + nbf = datetime(obj.claims.nbf, 'ConvertFrom', 'posixtime', 'TimeZone', 'UTC'); + end + + + function tf = isExpired(obj) + if ~isfield(obj.claims, 'exp') + error("JWT:isExpired", "Expected exp field not found"); + end + if posixtime(datetime('now', 'TimeZone', 'UTC')) < obj.claims.exp + tf = false; + else + tf = true; + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+utils/UUID.m b/Software/MATLAB/app/system/+mathworks/+utils/UUID.m new file mode 100644 index 0000000..624a8d3 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+utils/UUID.m @@ -0,0 +1,7 @@ +function uuid = UUID() + % UUID Returns a UUID string as created by java.util.UUID.randomUUID + + % Copyright 2024 The MathWorks, Inc. + + uuid = string(javaMethod('randomUUID','java.util.UUID')); +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+utils/addArgs.m b/Software/MATLAB/app/system/+mathworks/+utils/addArgs.m new file mode 100644 index 0000000..248adbf --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+utils/addArgs.m @@ -0,0 +1,25 @@ +function args = addArgs(options, argNames, initialArgs) + % addArg Builds and named argument cell array + % + % Example: + % args = mathworks.utils.addArgs(options, ["authMethod", "profileName"]); + % x = myFunc(args{:}); + + + % (c) 2024 MathWorks, Inc. + + arguments + options (1,1) struct + argNames string + initialArgs cell = {} + end + + args = initialArgs; + for n = 1:numel(argNames) + currArg = argNames(n); + if isfield(options, currArg) + args{end+1} = currArg; %#ok + args{end+1} = options.(currArg); %#ok + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/app/system/+mathworks/+utils/msOAuth2Client.m b/Software/MATLAB/app/system/+mathworks/+utils/msOAuth2Client.m new file mode 100644 index 0000000..24472d1 --- /dev/null +++ b/Software/MATLAB/app/system/+mathworks/+utils/msOAuth2Client.m @@ -0,0 +1,510 @@ +classdef msOAuth2Client < handle + % msOAuth2Client obtains and caches tokens for the Microsoft + % Identity Platform. + % + % OAuth2Client Methods: + % OAuth2Client - Constructor + % getToken - Obtain an access token for a requested scope + % getFullToken - Obtain the full token for a requested scope + % + % Note: the access tokens and refresh tokens are stored inside a + % MAT-file in plain-text and are not encrypted. The MAT-file is saved + % as .mlMsTokenCache in your home directory. This file should be kept + % confidential. + + % Copyright 2022-2024 The MathWorks, Inc. + + properties (Access=private, Constant) + CACHEFILENAME = fullfile(char(java.lang.System.getProperty('user.home')),'.mlMsTokenCache') + end + + properties (Access=private) + clientId + clientSecret + tenantId + tokenCache + refreshWindow = minutes(15) + additionalOptions + end + + methods + function obj = msOAuth2Client(tenantId,clientId,clientSecret,additionalOptions) + % msOAuth2Client Constructor + % + % Create a client for user principals through Device Code + % authentication: + % + % client = msOAuth2Client(tenantId,clientId); + % + % When working with Device Code authentication, user + % interaction is needed if a new token has to be requested. + % If the requested token already exists in the cache (and can + % be refreshed if needed) no further user interaction should + % be required. + % + % Create a client for service principals through Client + % Secret authentication: + % + % client = msOAuth2Client(tenantId,clientId,clientSecret); + % + % When working with Client Secret authentication, no user + % interaction is required. + arguments + tenantId string + clientId string + clientSecret string = string.empty + additionalOptions.CopyCode = true + additionalOptions.OpenBrowser = true + additionalOptions.Method = string.empty + additionalOptions.ServiceMetadataURI = matlab.net.URI + end + % Set object properties + obj.tenantId = tenantId; + obj.clientId = clientId; + obj.clientSecret = clientSecret; + obj.additionalOptions = additionalOptions; + end + + + function token = getToken(obj, scopes) + % GETTOKEN Obtain and return an access token for the configured + % Tenant, ClientID and Scopes. + % + % If a token for configured Tenant, ClientID and Scopes: + % - IS found in the cache and it + % - Has NOT expired, it is returned + % - HAS expired and a refresh token IS available, it + % is refreshed and then returned, if refresh fails + % a new token is requested and returned + % - HAS expired and there is NO refresh token, a new + % token is requested and returned + % - Is NOT found in the cache, a new token is requested + % and returned upon success + % + % Note: to obtain a refresh token, explicitly include + % "offline_access" in the requested scopes. + % + % Examples: + % + % Obtain an access token for Azure Key Vault Scope with + % refresh token: + % + % access_token = GETTOKEN(["https://vault.azure.net/.default","offline_access"]) + % + % Obtain an access token for Azure Storage without + % refresh token: + % + % access_token = GETTOKEN(["https://storage.azure.com/.default"]) + + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + % Get the full token + fullToken = obj.getFullToken(scopes); + % Only actually return the access token + % token = fullToken.accessToken; + % TODO - cleanup + token = fullToken; + end + + function token = getFullToken(obj, scopes) + % GETFULLTOKEN Obtains a token in the same way as getToken, + % only instead of only returning the access token itself, a + % struct is returned which contains the accessToken, an + % expiresAt field, and if available also a refreshToken. Then + % syntax for this method is the same as for getToken. + % + % See Also: GETTOKEN + + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + % For consistency sort the scopes alphabetically + scopes = sort(scopes); + + % Refresh the cache from disk or create a new one + obj.initializeCache(); + + % Try to find a token in the cache + if ~isempty(obj.clientSecret) + principal = "service"; + else + principal = "user"; + end + + % TODO reenable caching + %token = findTokenInCache(obj,principal,scopes); + token = ''; + + if ~isempty(token) + % Check expiry + if (token.expiresAt - datetime('now') > obj.refreshWindow) + % Token is not expired, return token + return + end + % Token has expired, if there is refresh token try to + % refresh + if isfield(token,'refreshToken') + token = obj.refreshToken(principal,scopes,token); + if ~isempty(token) + % Token refreshed successfully, return token + return + end + end + end + % If there was no token in the first place, there is no refresh + % token or refresh failed, try to obtain an entirely new one + token = obj.acquireToken(scopes); + end + end + + + methods (Access=private) + + function token = refreshToken(obj, principal, scopes, token) + % Perform the refresh + + arguments + obj (1,1) mathworks.utils.msOAuth2Client + principal string {mustBeTextScalar, mustBeNonzeroLengthText} + scopes string + token string {mustBeTextScalar, mustBeNonzeroLengthText} + end + + url = sprintf('https://login.microsoftonline.com/%s/oauth2/v2.0/token',obj.tenantId); + body = matlab.net.QueryParameter(... + 'tenant',obj.tenantId,... + 'client_id',obj.clientId,... + 'grant_type','refresh_token',... + 'refresh_token', token.refreshToken); + req = matlab.net.http.RequestMessage('POST',... + matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'),... + body); + res = req.send(url); + if res.StatusCode ~= 200 + % If not successful, throw a *warning* (we can still try to + % obtain a brand new token, so do not error out entirely) + warning('Refreshing token failed:\n%s\n%s',res.StatusLine,char(res.Body)); + token = []; + return + end + % If successful, update the old token + token.accessToken = res.Body.Data.access_token; + token.expiresAt = datetime('now') + seconds(res.Body.Data.expires_in); + if isfield(res.Body.Data,'refresh_token') + token.refreshToken = res.Body.Data.refresh_token; + end + if isfield(res.Body.Data,'id_token') + token.idToken = res.Body.Data.id_token; + end + % Save new token in cache + obj.addTokenToCache(principal,scopes,token); + end + + function token = acquireToken(obj,scopes) + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + switch lower(obj.additionalOptions.Method) + case string.empty + if ~isempty(obj.clientSecret) + % Obtain using client credential grant + token = obj.acquireClientCredentialToken(scopes); + else + % Obtain using devicecode flow + token = obj.acquireDeviceCodeToken(scopes); + end + + case "devicecode" + token = obj.acquireDeviceCodeToken(scopes); + + case "clientsecret" + token = obj.acquireClientCredentialToken(scopes); + + case "interactivebrowser" + token = obj.acquireInteractiveBrowserToken(scopes, obj.additionalOptions.ServiceMetadataURI); + + case "managedidentity" + token = obj.acquireManagedIdentityToken(scopes); + + otherwise + error('Unexpected authentication Method value: %s',obj.additionalOptions.Method); + end + end + + function token = acquireManagedIdentityToken(obj, scopes) + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + builder = azure.identity.ManagedIdentityCredentialBuilder(); + builder = builder.clientId(obj.clientId); + builder = builder.httpClient(); + builder = builder.maxRetry(int32(1)); + credentials = builder.build(); + + tr = azure.core.credential.TokenRequestContext; + for n=1:numel(scopes) + tr = tr.addScopes(scopes(n)); + end + token = string(credentials.getToken(tr).getToken()); + end + + function token = acquireInteractiveBrowserToken(obj, scopes, serviceMetadataURI) + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + serviceMetadataURI (1,1) matlab.net.URI + end + + scopeFields = split(string(scopes)," "); + redirectUrl = "http://localhost:8765"; + webOpts = weboptions('Timeout', 30); + kustoMetaData = webread(serviceMetadataURI, webOpts); + if isfield(kustoMetaData, 'AzureAD') + if isfield(kustoMetaData.AzureAD, 'KustoClientAppId') + KustoClientAppId = kustoMetaData.AzureAD.KustoClientAppId; + else + error('KustoClientAppId field not found in kustoMetaData.AzureAD'); + end + else + error('AzureAD field not found in kustoMetaData'); + end + + % Build credential + builder = azure.identity.InteractiveBrowserCredentialBuilder(); + builder = builder.clientId(KustoClientAppId); + builder = builder.tenantId(obj.tenantId); + builder = builder.redirectUrl(redirectUrl); + builder = builder.httpClient(); + builder = builder.authorityHost(strcat('https://login.microsoftonline.com/', obj.tenantId)); + credentials = builder.build(); + + tr = azure.core.credential.TokenRequestContext; + for n=1:numel(scopeFields) + tr = tr.addScopes(scopeFields(n)); + end + token = string(credentials.getToken(tr).getToken()); + end + + function token = acquireClientCredentialToken(obj,scopes) + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + scopes = strjoin(scopes," "); + % Obtain the token through client secret flow + url = sprintf('https://login.microsoftonline.com/%s/oauth2/v2.0/token',obj.tenantId); + body = matlab.net.QueryParameter(... + 'tenant',obj.tenantId,... + 'client_id',obj.clientId,... + 'client_secret',obj.clientSecret,... + 'scope',scopes,... + 'grant_type','client_credentials'); + req = matlab.net.http.RequestMessage('POST',... + matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'),... + body); + res = req.send(url); + if res.StatusCode ~= 200 + error('Error occurred while obtaining token using Client Secret:\n%s\n%s',res.StatusLine,char(res.Body)); + end + % Cache the token information + token.accessToken = res.Body.Data.access_token; + token.expiresAt = datetime('now') + seconds(res.Body.Data.expires_in); + % Save the token to the cache + obj.addTokenToCache('service',scopes,token); + end + + function token = acquireDeviceCodeToken(obj,scopes) + % Initiate Device Code Authentication + arguments + obj (1,1) mathworks.utils.msOAuth2Client + scopes string + end + + scopes = strjoin(scopes," "); + url = sprintf('https://login.microsoftonline.com/%s/oauth2/v2.0/devicecode',obj.tenantId); + body = matlab.net.QueryParameter(... + 'tenant',obj.tenantId,... + 'client_id',obj.clientId,... + 'scope',scopes); + req1 = matlab.net.http.RequestMessage('POST',[ ... + matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'),... + matlab.net.http.HeaderField('Accept','application/json') ... + ],body); + res1 = req1.send(url); + if res1.StatusCode ~= 200 + error('Error occurred while initiating Device Login:\n%s\n%s',res1.StatusLine,char(res1.Body)); + end + + % Display instructions + disp(res1.Body.Data.message); + + % Copy code to clipboard and open browser + if obj.additionalOptions.CopyCode + clipboard("copy",res1.Body.Data.user_code) + end + if obj.additionalOptions.OpenBrowser + web(res1.Body.Data.verification_uri); + end + + % Poll for response + expires = datetime('now') + seconds(res1.Body.Data.expires_in); + interval = res1.Body.Data.interval; + fprintf('Waiting for authorization...') + % Configure Token URL + url = sprintf('https://login.microsoftonline.com/%s/oauth2/v2.0/token',obj.tenantId); + % Prepare request + body = matlab.net.QueryParameter(... + 'tenant',obj.tenantId,... + 'client_id',obj.clientId,... + 'grant_type','urn:ietf:params:oauth:grant-type:device_code',... + 'device_code', res1.Body.Data.device_code); + req2 = matlab.net.http.RequestMessage('POST',... + matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded'),... + body); + while datetime('now') < expires + % Perform the actual request + res2 = req2.send(url); + % Check the response + switch res2.StatusCode + case 200 % Success + fprintf('success\n'); + % Grab the relevant fields from the response + token.accessToken = res2.Body.Data.access_token; + token.expiresAt = datetime('now') + seconds(res2.Body.Data.expires_in); + if isfield(res2.Body.Data,'refresh_token') + token.refreshToken = res2.Body.Data.refresh_token; + end + if isfield(res2.Body.Data,'id_token') + token.idToken = res2.Body.Data.id_token; + end + % Store the obtained token in the cache + obj.addTokenToCache('user',scopes,token); + return + case 400 % Still pending or an actual error + switch res2.Body.Data.error + case "authorization_pending" + % No real error, the user simply has not + % entered the code yet, just wait and try + % again + pause(interval) + fprintf('.') + case "authorization_declined" + % The user actively declined the request + error('The end user denied the authorization request.') + case "expired_token" + error('Authorization did not complete within timeout period.') + otherwise + error('Error occurred while polling for Device Login to complete:\n%s\n%s',res2.StatusLine,char(res2.Body)); + end % error in body + otherwise % Unknown StatusCode + error('Error occurred while polling for Device Login to complete:\n%s\n%s',res2.StatusLine,char(res2.Body)); + end % end StatusCode + end % end while + error('Authorization did not complete within timeout period.'); + end + + + function addTokenToCache(obj,principal,scopes,token) + % Check whether any tokens have been cached for the given + % tenant at all + arguments + obj (1,1) mathworks.utils.msOAuth2Client + principal string {mustBeTextScalar, mustBeNonzeroLengthText} + scopes string + token + end + + if ~obj.tokenCache.isKey(obj.tenantId) + obj.tokenCache(obj.tenantId) = containers.Map(); + end + cache = obj.tokenCache(obj.tenantId); + % Check whether any tokens have been cached for the given + % principal at all + if ~cache.isKey(principal) + cache(principal) = containers.Map(); + end + cache = cache(principal); + + % Check whether any tokens have been cached for the given + % clientId at all + if ~cache.isKey(obj.clientId) + cache((obj.clientId)) = containers.Map(); + end + cache = cache(obj.clientId); + + % Store the token in the cache under the right scopes key + scopesKey = strjoin(scopes," "); + cache(scopesKey) = token; + + % And save the cache + obj.saveCache + end + + function token = findTokenInCache(obj,principal,scopes) + % Return an empty token if returning early + arguments + obj (1,1) mathworks.utils.msOAuth2Client + principal string {mustBeTextScalar, mustBeNonzeroLengthText} + scopes string + end + + token = []; + % Check whether any tokens have been cached for the given + % tenant at all + if ~obj.tokenCache.isKey(obj.tenantId) + return + end + cache = obj.tokenCache(obj.tenantId); + % Check whether any tokens have been cached for the given + % principal at all + if ~cache.isKey(principal) + return + end + cache = cache(principal); + + % Check whether any tokens have been cached for the given + % clientId at all + if ~cache.isKey(obj.clientId) + return + end + cache = cache(obj.clientId); + + % Check whether any tokens have been cached for the requested + % scopes + scopesKey = strjoin(scopes," "); + if ~cache.isKey(scopesKey) + return + end + + % Return the one and only token which was found if we got to + % here + token = cache(scopesKey); + end + + function initializeCache(obj) + % Load cache from disk if it exists or start a new one + if exist(obj.CACHEFILENAME,'file') == 2 + data = load(obj.CACHEFILENAME,'-mat'); + obj.tokenCache = data.cache; + else + obj.tokenCache = containers.Map; + end + end + + function saveCache(obj) + % Save the cache to disk + cache = obj.tokenCache; + save(obj.CACHEFILENAME,'cache'); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/config/.gitignore b/Software/MATLAB/config/.gitignore index a6c57f5..c0b247a 100644 --- a/Software/MATLAB/config/.gitignore +++ b/Software/MATLAB/config/.gitignore @@ -1 +1,11 @@ *.json +*.password +*.clientSecret +*.dontUse +*.deviceCode +*.free +*.paid +*.interactiveBrowser +*.bak +*.gitlab +*.managedIdentity diff --git a/Software/MATLAB/config/adx.Client.Settings.json.clientSecretTemplate b/Software/MATLAB/config/adx.Client.Settings.json.clientSecretTemplate new file mode 100644 index 0000000..7827bf8 --- /dev/null +++ b/Software/MATLAB/config/adx.Client.Settings.json.clientSecretTemplate @@ -0,0 +1,10 @@ +{ + "preferredAuthMethod" : "clientSecret", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "clientSecret" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} \ No newline at end of file diff --git a/Software/MATLAB/config/adx.Client.Settings.json.deviceCodeTemplate b/Software/MATLAB/config/adx.Client.Settings.json.deviceCodeTemplate new file mode 100644 index 0000000..0d19af3 --- /dev/null +++ b/Software/MATLAB/config/adx.Client.Settings.json.deviceCodeTemplate @@ -0,0 +1,9 @@ +{ + "preferredAuthMethod" : "deviceCode", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} \ No newline at end of file diff --git a/Software/MATLAB/config/adx.Client.Settings.json.interactiveBrowserTemplate b/Software/MATLAB/config/adx.Client.Settings.json.interactiveBrowserTemplate new file mode 100644 index 0000000..d604a48 --- /dev/null +++ b/Software/MATLAB/config/adx.Client.Settings.json.interactiveBrowserTemplate @@ -0,0 +1,9 @@ +{ + "preferredAuthMethod" : "interactiveBrowser", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" +} \ No newline at end of file diff --git a/Software/MATLAB/config/adx.Client.Settings.json.managedIdentityTemplate b/Software/MATLAB/config/adx.Client.Settings.json.managedIdentityTemplate new file mode 100644 index 0000000..805e04d --- /dev/null +++ b/Software/MATLAB/config/adx.Client.Settings.json.managedIdentityTemplate @@ -0,0 +1,10 @@ +{ + "preferredAuthMethod" : "managedIdentity", + "subscriptionId" : "", + "tenantId" : "", + "clientId" : "", + "database" : "", + "resourceGroup": "", + "cluster" : "https://..kusto.windows.net" + "scopes" : "https://...kusto.windows.net/.default" +} \ No newline at end of file diff --git a/Software/MATLAB/config/adx.jdbc.Client.Settings.json.template b/Software/MATLAB/config/adx.jdbc.Client.Settings.json.template new file mode 100644 index 0000000..740e2d1 --- /dev/null +++ b/Software/MATLAB/config/adx.jdbc.Client.Settings.json.template @@ -0,0 +1,7 @@ +{ + "DatabaseName" : "mydatabase", + "Username" : "myname@example.com", + "Password" : "mysecretpassword", + "ClusterNameRegion" : "myadxcluster.westeurope", + "Authetication": "ActiveDirectoryPassword" +} \ No newline at end of file diff --git a/Software/MATLAB/config/storagesettings.json.connectionString b/Software/MATLAB/config/storagesettings.json.connectionString new file mode 100644 index 0000000..f843266 --- /dev/null +++ b/Software/MATLAB/config/storagesettings.json.connectionString @@ -0,0 +1,5 @@ +{ + "AuthMethod": "ConnectionString", + "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=adlsg2mbtest;AccountKey=lrd7P1Uh879h3J/LCJut/dlyabmTBmpCvDDH/QoaviMEkvxhd96DsgwUBHyIuW0Q258MZC8V83WaOZcn34ua4g==;EndpointSuffix=core.windows.net", + "AccountName": "adlsg2mbtest" +} \ No newline at end of file diff --git a/Software/MATLAB/config/storagesettings.json.storageSharedKey b/Software/MATLAB/config/storagesettings.json.storageSharedKey new file mode 100644 index 0000000..3c4a13f --- /dev/null +++ b/Software/MATLAB/config/storagesettings.json.storageSharedKey @@ -0,0 +1,5 @@ +{ + "AuthMethod": "StorageSharedKey", + "AccountKey" : "lrd7P1Uh879h3J/LCJut/dlyabmTBmpCvDDH/QoaviMEkvxhd96DsgwUBHyIuW0Q258MZC8V83WaOZcn34ua4g==", + "AccountName" : "adlsg2mbtest" +} \ No newline at end of file diff --git a/Software/MATLAB/lib/jar/log4j2.xml b/Software/MATLAB/lib/jar/log4j2.xml index cbf14b6..57d83d6 100644 --- a/Software/MATLAB/lib/jar/log4j2.xml +++ b/Software/MATLAB/lib/jar/log4j2.xml @@ -12,15 +12,15 @@ - + - + - + \ No newline at end of file diff --git a/Software/MATLAB/startup.m b/Software/MATLAB/startup.m index 981f849..b933337 100755 --- a/Software/MATLAB/startup.m +++ b/Software/MATLAB/startup.m @@ -3,7 +3,7 @@ function startup(varargin) % This script will add the paths below the root directory into the MATLAB % path. - % Copyright 2021-2023 The MathWorks + % Copyright 2021-2024 The MathWorks % If deployed in a .ctf or .exe do not do anything in startup.m & return if isdeployed() || ismcc() @@ -12,10 +12,16 @@ function startup(varargin) p = inputParser; p.addParameter('useStatic', true, @islogical); + p.addParameter('useADX', true, @islogical); p.parse(varargin{:}); useStatic = p.Results.useStatic; + useADX = p.Results.useADX; - displayBanner('Adding Azure Paths'); + if ~usejava('jvm') + error('Azure:Services','MATLAB Java support is required'); + end + + displayBanner('Adding Azure Services paths'); azCommonJar = 'azure-common-sdk-0.2.0.jar'; @@ -39,11 +45,12 @@ function startup(varargin) % Check if the JAR file exists commonJarPath = fullfile(commonRoot, 'Software', 'MATLAB', 'lib', 'jar', azCommonJar); docPath = fullfile(commonRoot, 'Documentation', 'Installation.md'); - + docLink = sprintf('%s', docPath, docPath); + if ~isfile(commonJarPath) - error('Azure:Services', 'Could not find required jar file: %s\nSee documentation for details on building the jar file using Maven: %s', commonJarPath, docPath); + fprintf(2, 'Could not find required jar file: %s\nSee documentation for details on building the jar file using Maven: %s\n', commonJarPath, docLink); end - + if useStatic % Set JCP file link jcpPath = fullfile(prefdir, 'javaclasspath.txt'); @@ -58,21 +65,56 @@ function startup(varargin) % Does not have to be first but should be near the start, % due to . Needs to be before jna.jar if ~any(strcmpi(staticPath(1:5), commonJarPath)) - warning('Azure:Services', '%s was not found at the start of the static Java classpath\nSee documentation for configuration details: %s', commonJarPath, docPath); + warning('Azure:Services', '%s was not found at the start of the static Java classpath\nSee documentation for configuration details: %s', commonJarPath, docLink); fprintf('Edit static Java classpath: %s\n', jcpLink); end end else - fprintf('\nEdit static Java classpath: %s\n', jcpLink); - error('Azure:Services', 'Required jar file not found on the static Java classpath: %s\nSee documentation for configuration details: %s', commonJarPath, docPath); + adxAuthDocPath = fullfile(commonRoot, 'Documentation', 'ADXAuthentication.md'); + adxAuthDocLink = sprintf('%s', adxAuthDocPath, adxAuthDocPath); + fprintf(2, "azure-common-sdk jar file not found on the static Java classpath:\n %s\n", commonJarPath); + fprintf(2, " Edit the static Java classpath: %s\n", jcpLink); + fprintf("This is required except when certain Azure Data Explorer with Client Secret authentication\n"); + fprintf("See documentation for configuration details:\n"); + fprintf(" %s\n %s\n", docLink, adxAuthDocLink); end else - iSafeAddToJavaPath(commonJarPath); + iSafeAddToJavaPath(commonJarPath); end - disp('Ready'); + if useADX + startADX(); + else + disp("Skipping Azure Data Explorer startup"); + end + + disp('Azure Services Ready'); end + +function tf = startADX + tf = false; + + currentVersion = ver('matlab').Version; %#ok + % 9.9 == 20b 9.10 == 21a + if verLessThan('matlab','9.11') && ~strcmp(currentVersion, "9.10") %#ok + % Error now no point going forward + fprintf(2, 'MATLAB Release R2021a or later is required to use Azure Data Explorer, skipping initialization\n'); + end + checkPCT(); +end + + +function checkPCT() + if ~isempty(ver('parallel')) + prefDocPath = fullfile(mathworks.adx.adxRoot(-2, 'Documentation'), 'Performance.md'); + prefDocLink = sprintf('%s', prefDocPath, prefDocPath); + fprintf("Parallel Computing Toolbox is installed, to enable parallel processing\n"); + fprintf("when using Azure Data Explorer see:\n %s \n", prefDocLink); + end +end + + function addFilteredFolders(rootDirs) % Helper function to add all folders to the path % Loop through the paths and add the necessary subdirectories to the MATLAB path diff --git a/Software/MATLAB/test/unit/Adx/adxFixture.m b/Software/MATLAB/test/unit/Adx/adxFixture.m new file mode 100644 index 0000000..1099c57 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/adxFixture.m @@ -0,0 +1,29 @@ +classdef adxFixture < matlab.unittest.fixtures.Fixture + % Writes the configuration files based on environment variables, this + % facilities unit testing in CI/CD setups as well as local testing + + % Copyright 2024 The MathWorks, Inc. + + methods + function setup(~) + disp 'Writing Configuration Files' + configFile = fullfile(AzureCommonRoot, 'config', 'adx.Client.Settings.json'); + json = jsonencode(struct(... + 'preferredAuthMethod','clientSecret',... + 'subscriptionId',getenv('ADX_SUBSCRIPTIONID'),... + 'tenantId',getenv('ADX_TENANTID'),... + 'clientId',getenv('ADX_CLIENT_ID'),... + 'clientSecret',getenv('ADX_CLIENT_SECRET'),... + 'database',getenv('ADX_DATABASE'),... + 'cluster',getenv('ADX_CLUSTER'),... + 'resourceGroup',getenv('ADX_RESOURCEGROUP')... + )); + f = fopen(configFile,'w'); fwrite(f,json);fclose(f); + end + + function teardown(~) + disp 'Removing Configuration Files' + delete(fullfile(AzureCommonRoot,'config','adx.Client.Settings.json')) + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/fixtures/.gitignore b/Software/MATLAB/test/unit/Adx/fixtures/.gitignore new file mode 100644 index 0000000..df91ddb --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/fixtures/.gitignore @@ -0,0 +1,4 @@ +random-data.json +outages.parquet +random-data-license.txt +random-data-license \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/fixtures/crdTable.mat b/Software/MATLAB/test/unit/Adx/fixtures/crdTable.mat new file mode 100644 index 0000000..8e3ecad Binary files /dev/null and b/Software/MATLAB/test/unit/Adx/fixtures/crdTable.mat differ diff --git a/Software/MATLAB/test/unit/Adx/fixtures/provisionFixtures.m b/Software/MATLAB/test/unit/Adx/fixtures/provisionFixtures.m new file mode 100644 index 0000000..11d3ac2 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/fixtures/provisionFixtures.m @@ -0,0 +1,51 @@ +% Script to put some sample data files in place + +% Run in the test/unit/fixtures directory +cd(mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures")); + +% Get outages.parquet from MATLAB install +outagesPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "outages.parquet"); +if ~isfile(outagesPath) + error("File not found: %s", outagesPath); +else + dstPath = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "outages.parquet"); + if isfile(dstPath) + fprintf("File already exists: %s\n", dstPath); + else + [status, msg] = copyfile(outagesPath, dstPath); + if status == 1 + fprintf("Saved: %s\n", dstPath) + else + fprintf("Copy failed, destination: %s, Message: %s\n", dstPath, msg); + end + end +end + +% Download a sample file with many edge cases +dstPath = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "random-data-license.txt"); +if isfile(dstPath) + fprintf("File already exists: %s\n", dstPath); +else + result = websave("random-data-license.txt", "https://raw.githubusercontent.com/ag-ramachandran/random-json-data-types/main/LICENSE"); + fprintf("Saved: %s\n", result); +end + +dstPath = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "random-data.json"); +if isfile(dstPath) + fprintf("File already exists: %s\n", dstPath); +else + result = websave("random-data.json", "https://raw.githubusercontent.com/ag-ramachandran/random-json-data-types/main/random-data.json"); + fprintf("Saved: %s\n", result); +end + +% Airline small WIP +airlinesmallPath = fullfile(matlabroot, "toolbox", "matlab", "demos", "airlinesmall.parquet"); +if ~isfile(airlinesmallPath) + error("File not found: %s", airlinesmallPath); +end + +%% TODO create a database and table and populate it with airlinesamll + +% Automatically created mapping command +% .create table ['airlinesmall'] ingestion parquet mapping 'airlinesmall_mapping' '[{"column":"Date", "Properties":{"Path":"$[\'Date\']"}},{"column":"DayOfWeek", "Properties":{"Path":"$[\'DayOfWeek\']"}},{"column":"DepTime", "Properties":{"Path":"$[\'DepTime\']"}},{"column":"CRSDepTime", "Properties":{"Path":"$[\'CRSDepTime\']"}},{"column":"ArrTime", "Properties":{"Path":"$[\'ArrTime\']"}},{"column":"CRSArrTime", "Properties":{"Path":"$[\'CRSArrTime\']"}},{"column":"UniqueCarrier", "Properties":{"Path":"$[\'UniqueCarrier\']"}},{"column":"FlightNum", "Properties":{"Path":"$[\'FlightNum\']"}},{"column":"TailNum", "Properties":{"Path":"$[\'TailNum\']"}},{"column":"ActualElapsedTime", "Properties":{"Path":"$[\'ActualElapsedTime\']"}},{"column":"CRSElapsedTime", "Properties":{"Path":"$[\'CRSElapsedTime\']"}},{"column":"AirTime", "Properties":{"Path":"$[\'AirTime\']"}},{"column":"ArrDelay", "Properties":{"Path":"$[\'ArrDelay\']"}},{"column":"DepDelay", "Properties":{"Path":"$[\'DepDelay\']"}},{"column":"Origin", "Properties":{"Path":"$[\'Origin\']"}},{"column":"Dest", "Properties":{"Path":"$[\'Dest\']"}},{"column":"Distance", "Properties":{"Path":"$[\'Distance\']"}},{"column":"TaxiIn", "Properties":{"Path":"$[\'TaxiIn\']"}},{"column":"TaxiOut", "Properties":{"Path":"$[\'TaxiOut\']"}},{"column":"Cancelled", "Properties":{"Path":"$[\'Cancelled\']"}},{"column":"CancellationCode", "Properties":{"Path":"$[\'CancellationCode\']"}},{"column":"Diverted", "Properties":{"Path":"$[\'Diverted\']"}},{"column":"CarrierDelay", "Properties":{"Path":"$[\'CarrierDelay\']"}},{"column":"WeatherDelay", "Properties":{"Path":"$[\'WeatherDelay\']"}},{"column":"NASDelay", "Properties":{"Path":"$[\'NASDelay\']"}},{"column":"SecurityDelay", "Properties":{"Path":"$[\'SecurityDelay\']"}},{"column":"LateAircraftDelay", "Properties":{"Path":"$[\'LateAircraftDelay\']"}}]' +% \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/testCluster.m b/Software/MATLAB/test/unit/Adx/testCluster.m new file mode 100644 index 0000000..c7a4fd4 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testCluster.m @@ -0,0 +1,62 @@ +classdef (SharedTestFixtures={adxFixture}) testCluster < matlab.unittest.TestCase + % TESTCLUSTER Unit testing for the cluster API + + % (c) 2023 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + clusterName string + cluster adx.control.models.Cluster + end + + methods (TestClassSetup) + function checkCluster(testCase) + disp("Running checkCluster"); + testCase.clusterName = getenv("ADXCLUSTERNAME"); + % Create a cluster object for the tests + if strlength(testCase.clusterName) > 1 + c = mathworks.adx.clustersGet(cluster=testCase.clusterName); + else + c = mathworks.adx.clustersGet(); + end + testCase.verifyClass(c, 'adx.control.models.Cluster'); + testCase.cluster = c; + + % Check cluster is already running + state = testCase.cluster.xproperties.state; + testCase.verifyClass(state, 'adx.control.models.ClusterProperties_1StateEnum'); + testCase.verifyEqual(state, adx.control.models.ClusterProperties_1StateEnum.Running); + + defaultCluster = mathworks.internal.adx.getDefaultConfigValue('cluster'); + mURI = matlab.net.URI(defaultCluster); + nameFields = split(mURI.Host, "."); + testCase.verifyEqual(nameFields(1), testCase.cluster.name); + end + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + + end + end + + methods (Test) + function testClustersList(testCase) + disp("Running testClustersList"); + c = adx.control.api.Clusters; + [code, result, response] = c.clustersList(c.subscriptionId, c.apiVersion); %#ok + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + testCase.verifyClass(result,'adx.control.models.ClusterListResult'); + testCase.verifyTrue(isprop(result, 'value')); + % The testCase cluster at least should be listed + testCase.verifyGreaterThanOrEqual(numel(result.value), 1); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/testCmds.m b/Software/MATLAB/test/unit/Adx/testCmds.m new file mode 100644 index 0000000..ab7cb97 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testCmds.m @@ -0,0 +1,76 @@ +classdef (SharedTestFixtures={adxFixture}) testCmds < matlab.unittest.TestCase + % testCmds Unit testing for high level commands + + % (c) 2024 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + clusterName string + cluster adx.control.models.Cluster + state adx.control.models.ClusterProperties_1StateEnum + end + + methods (TestClassSetup) + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + end + end + + methods (Test) + function testListTables(testCase) + disp("Running testListTables"); + [tableNames, success, tableDetails] = mathworks.adx.listTables(database="unittestdb"); + testCase.verifyTrue(success); + testCase.verifyTrue(istable(tableDetails)); + testCase.verifyTrue(isstring(tableNames)); + testCase.verifyTrue(any(contains(tableNames, "outage"))); + testCase.verifyTrue(any(contains(tableNames, "airlinesmall"))); + end + + + function testTableExists(testCase) + disp("Running testTableExists"); + tf = mathworks.adx.tableExists("outages", database="unittestdb"); + testCase.verifyTrue(tf); + tf = mathworks.adx.tableExists("NotATable", database="unittestdb"); + testCase.verifyFalse(tf); + end + + + function testDropTable(testCase) + disp("Running testDropTable"); + % drop a table that does not exist + tf = mathworks.adx.tableExists("NotATable", database="unittestdb"); + testCase.verifyFalse(tf); + disp("Error message expected:") + result = mathworks.adx.dropTable("NotATable", database="unittestdb"); + testCase.verifyClass(result, "adx.control.models.ErrorResponse"); + testCase.verifyEqual(result.error.code, "BadRequest_EntityNotFound"); + + % drop a table that does exist + matlabTable = table("abc", 123, true); + if mathworks.adx.tableExists("tempTable", database="unittestdb") + result = mathworks.adx.dropTable("tempTable", database="unittestdb"); + testCase.verifyTrue(istable(result)); + testCase.verifyFalse(any(contains(result.TableName, "tempTable"))); + end + + [tf, result] = mathworks.adx.createTable(matlabTable, "tempTable", database="unittestdb"); + testCase.verifyTrue(tf); + testCase.verifyTrue(istable(result)); + testCase.verifyEqual(result.TableName, "tempTable"); + result = mathworks.adx.dropTable("tempTable", database="unittestdb"); + testCase.verifyTrue(istable(result)); + testCase.verifyFalse(any(contains(result.TableName, "tempTable"))); + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/testCurl.m b/Software/MATLAB/test/unit/Adx/testCurl.m new file mode 100644 index 0000000..4c287e0 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testCurl.m @@ -0,0 +1,43 @@ +classdef (SharedTestFixtures={adxFixture}) testCurl < matlab.unittest.TestCase + % testCurl Unit testing for high level commands + + % (c) 2024 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + clusterName string + cluster adx.control.models.Cluster + state adx.control.models.ClusterProperties_1StateEnum + end + + methods (TestClassSetup) + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + end + end + + methods (Test) + function testadxCurlWriteDefault(testCase) + disp("Running testadxCurlWriteDefault"); + [tf, result, id] = mathworks.internal.curl.adxCurlWrite(); + testCase.verifyTrue(tf); + testCase.verifyTrue(isstring(id)); + testCase.verifyTrue(isstruct(result)); + testCase.verifyTrue(isfield(result, "Tables")); + testCase.verifyEqual(numel(result.Tables), 4); + testCase.verifyTrue(isfield(result.Tables(4), "TableName")); + testCase.verifyEqual(result.Tables(4).TableName, 'Table_3'); + testCase.verifyEqual(result.Tables(1).Rows{1}{:}, 'Hello World'); + end + + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/testCustomDecoder.m b/Software/MATLAB/test/unit/Adx/testCustomDecoder.m new file mode 100644 index 0000000..2a72a8a --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testCustomDecoder.m @@ -0,0 +1,149 @@ +classdef (SharedTestFixtures={adxFixture}) testCustomDecoder < matlab.unittest.TestCase + % testCmds Unit testing for high level commands + + % (c) 2024 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + clusterName string + cluster adx.control.models.Cluster + state adx.control.models.ClusterProperties_1StateEnum + Database = "unittestdb" + end + + methods (TestClassSetup) + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + end + end + + methods (Test) + function testCRD(testCase) + disp("Running testCRD"); + usePCT = getenv('USEPCT'); + if strcmp(usePCT, 'FALSE') + disp("Not using PCT skipping testCRD"); + else + tableName = "exampleCRD"; + matFile = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "crdTable.mat"); + testCase.verifyTrue(isfile(matFile)); + load(matFile, "crdTable"); + if ~mathworks.adx.tableExists(tableName, database=testCase.Database) + % Regenerate an exampleCRD table if required + % nrows = 60000; + % intCol = int64(randi(intmax('int32'), nrows, 1, "int32")); + % doubleCol = zeros(nrows, 1); + % stringCol = strings(nrows, 1); + % for n = 1:nrows + % doubleCol(n) = double(n); + % stringCol(n) = "myStringValue-" + num2str(n); + % end + % variableNames = ["intCol", "doubleCol", "stringCol"]; + % crdTable = table(intCol, doubleCol, stringCol); + % crdTable.Properties.VariableNames=variableNames; + [ingestTf, ingestResult] = mathworks.adx.ingestTable(crdTable, tableName=tableName, mode="drop", database=testCase.Database); %#ok + testCase.verifyTrue(ingestTf); + else + fprintf("Existing table found: %s\n", tableName); + end + + query = sprintf('table("%s", "all")', tableName); + crd = @mathworks.internal.adx.exampleCustomRowDecoder; + + [readBackResult, success] = mathworks.adx.run(query, useParallel=true, customRowDecoder=crd, verbose=true); + testCase.verifyTrue(success); + testCase.verifyEqual(readBackResult.intCol(1), crdTable.intCol(1)); + testCase.verifyEqual(readBackResult.doubleCol(1), crdTable.doubleCol(1)); + testCase.verifyEqual(readBackResult.stringCol(1), crdTable.stringCol(1)); + testCase.verifyEqual(readBackResult.intCol(end), crdTable.intCol(end)); + testCase.verifyEqual(readBackResult.doubleCol(end), crdTable.doubleCol(end)); + testCase.verifyEqual(readBackResult.stringCol(end), crdTable.stringCol(end)); + end + end + + function testCRDParallel(testCase) + disp("Running testCRDParallel"); + usePCT = getenv('USEPCT'); + if strcmp(usePCT, 'FALSE') + disp("Not using PCT skipping testCRDParallel"); + else + tableName = "exampleCRD"; + matFile = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "crdTable.mat"); + testCase.verifyTrue(isfile(matFile)); + load(matFile, "crdTable"); + if ~mathworks.adx.tableExists(tableName, database=testCase.Database) + [ingestTf, ingestResult] = mathworks.adx.ingestTable(crdTable, tableName=tableName, mode="drop", database=testCase.Database); %#ok + testCase.verifyTrue(ingestTf); + else + fprintf("Existing table found: %s\n", tableName); + end + + query = sprintf('table("%s", "all")', tableName); + crd = @mathworks.internal.adx.exampleCustomRowDecoder; + [readBackResult, success] = mathworks.adx.run(query, customRowDecoder=crd, useParallel=true); + testCase.verifyTrue(success); + testCase.verifyEqual(readBackResult.intCol(1), crdTable.intCol(1)); + testCase.verifyEqual(readBackResult.doubleCol(1), crdTable.doubleCol(1)); + testCase.verifyEqual(readBackResult.stringCol(1), crdTable.stringCol(1)); + testCase.verifyEqual(readBackResult.intCol(end), crdTable.intCol(end)); + testCase.verifyEqual(readBackResult.doubleCol(end), crdTable.doubleCol(end)); + testCase.verifyEqual(readBackResult.stringCol(end), crdTable.stringCol(end)); + end + end + + + + + function testCRDProgressiveParallel(testCase) + disp("Running testCRDProgressiveParallel"); + usePCT = getenv('USEPCT'); + + tableName = "exampleCRD"; + matFile = mathworks.adx.adxRoot("test", "unit", "Adx", "fixtures", "crdTable.mat"); + load(matFile, "crdTable"); + testCase.verifyTrue(isfile(matFile)); + if ~mathworks.adx.tableExists(tableName, database=testCase.Database) + [ingestTf, ingestResult] = mathworks.adx.ingestTable(crdTable, tableName=tableName, mode="drop", database=testCase.Database); %#ok + testCase.verifyTrue(ingestTf); + else + fprintf("Existing table found: %s\n", tableName); + end + + query = sprintf('table("%s", "all")', tableName); + crd = @mathworks.internal.adx.exampleCustomRowDecoder; + + if strcmp(usePCT, 'FALSE') + disp("Not using PCT skipping part of testCRDProgressiveParallel"); + else + args = {"customRowDecoder", crd, "propertyNames", "results_progressive_enabled", "propertyValues", {true},... + "verbose", true, "useParallel", true, "parallelThreshold", 500}; + [readBackResult, success] = mathworks.adx.run(query, args{:}); + + testCase.verifyTrue(success); + testCase.verifyEqual(readBackResult.intCol(1), crdTable.intCol(1)); + testCase.verifyEqual(readBackResult.doubleCol(1), crdTable.doubleCol(1)); + testCase.verifyEqual(readBackResult.stringCol(1), crdTable.stringCol(1)); + testCase.verifyEqual(readBackResult.intCol(end), crdTable.intCol(end)); + testCase.verifyEqual(readBackResult.doubleCol(end), crdTable.doubleCol(end)); + testCase.verifyEqual(readBackResult.stringCol(end), crdTable.stringCol(end)); + end + + % Non progressive non parallel version + [npResult, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run(query, verbose=true); %#ok + testCase.verifyTrue(success); + if ~strcmp(usePCT, 'FALSE') + % Does progressive and non progressive give the same table + testCase.verifyEqual(readBackResult, npResult); + end + end + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Adx/testDataTypes.m b/Software/MATLAB/test/unit/Adx/testDataTypes.m new file mode 100644 index 0000000..737e6e3 --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testDataTypes.m @@ -0,0 +1,290 @@ +classdef (SharedTestFixtures={adxFixture}) testDataTypes < matlab.unittest.TestCase + % testDataTypes Unit testing for data type conversion + + % (c) 2024 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + end + + methods (TestClassSetup) + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + end + end + + methods (Test) + function readTables(testCase) + % 123523 rows so takes a while to convert + % [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run('table("airlinesmall", "all")', nullPolicy=mathworks.adx.NullPolicy.AllowAll) %#ok + % testCase.verifyTrue(success); + % testCase.verifyEqual(height(result), 123523); + + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run('["airlinesmall"] | take 1000', nullPolicy=mathworks.adx.NullPolicy.AllowAll); %#ok + testCase.verifyTrue(success); + testCase.verifyEqual(height(result), 1000); + + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run('table("outages", "all")'); %#ok + testCase.verifyTrue(success); + testCase.verifyGreaterThanOrEqual(height(result), 1468); + end + + function testDuration(testCase) + % 1 2 3 4 5 6 7 8 9 10 11 + timespanStr = ["2d", "1.5h", "30m", "10s", "0.1s", "100ms", "10microsecond", "1tick" "time(15 seconds)", "time(2)", "time(0.12:34:56.7)"]; + expectedDurations = duration.empty; + expectedDurations(1) = days(2); + expectedDurations(2) = hours(1.5); + expectedDurations(3) = minutes(30); + expectedDurations(4) = seconds(10); + expectedDurations(5) = seconds(0.1); + % h m s ms + expectedDurations(6) = duration(0,0,0,100); + % d h m s 10microsecond + expectedDurations(7) = duration("0:0:0:0.000010", 'InputFormat', "dd:hh:mm:ss.SSSSSS", 'Format', "dd:hh:mm:ss.SSSSSS"); + % d h m s 1tick / 100 ns + expectedDurations(8) = duration("0:0:0:0.0000001", 'InputFormat', "dd:hh:mm:ss.SSSSSSS", 'Format', "dd:hh:mm:ss.SSSSSSS"); + expectedDurations(9) = seconds(15); + expectedDurations(10) = days(2); + expectedDurations(11) = duration("0:12:34:56.7", InputFormat="dd:hh:mm:ss.S"); + + testCase.verifyEqual(numel(timespanStr), numel(expectedDurations)); + + for n = 1:numel(timespanStr) + testCase.verifyEqual(mathworks.internal.adx.timespanLiteral2duration(timespanStr(n)), expectedDurations(n)); + end + end + + + function testTimespanLiterals(testCase) + disp("Running testTimespanLiterals"); + + [result, success, requestId] = mathworks.adx.run('.drop table timespanTests ifexists'); %#ok + testCase.verifyClass(requestId, "string"); + testCase.verifyGreaterThan(strlength(requestId), 0); + testCase.verifyTrue(success); + + %cmd = '.create table timespanTests ( daysC:timespan, hoursC:timespan, minutesC:timespan, seconds10:timespan, seconds01:timespan, duration100ms:timespan, duration10us:timespan, tick1C:timespan, time15s:timespan, time2:timespan, timeStr:timespan )'; + cmd = '.create table timespanTests ( daysC:timespan)'; + [result, success, requestId] = mathworks.adx.run(cmd); + testCase.verifyTrue(success); + testCase.verifyClass(requestId, "string"); + testCase.verifyGreaterThan(strlength(requestId), 0); + testCase.verifyEqual(result.TableName, "timespanTests"); + testCase.verifyEqual(height(result), 1); + testCase.verifyEqual(width(result), 5); + testCase.verifyTrue(startsWith(result.Schema, '{"Name":"timespanTests","OrderedColumns":[{"Name":"daysC","Type":')); + + [result, success, requestId] = mathworks.adx.run('.show table timespanTests cslschema'); + testCase.verifyTrue(success); + testCase.verifyClass(requestId, "string"); + testCase.verifyGreaterThan(strlength(requestId), 0); + testCase.verifyEqual(result.TableName, "timespanTests"); + testCase.verifyEqual(height(result), 1); + testCase.verifyEqual(width(result), 5); + %testCase.verifyTrue(startsWith(result.Schema, 'daysC:timespan,hoursC:timespan,minutesC:timespan,seconds10:timespan,seconds01:timespan')); + testCase.verifyTrue(startsWith(result.Schema, 'daysC:timespan')); + + [result, success, requestId] = mathworks.adx.run('.ingest inline into table timespanTests <| "2d"'); %#ok + testCase.verifyTrue(success); + testCase.verifyClass(requestId, "string"); + testCase.verifyGreaterThan(strlength(requestId), 0); + + [result, success, requestId] = mathworks.adx.run('timespanTests | take 5'); %#ok + testCase.verifyTrue(success); + testCase.verifyEqual(result.daysC, days(2)); + end + + + function testDynamic(testCase) + % TODO create a comparable data set + % [result, success, requestId] = mathworks.adx.run('capability | take 5'); %#ok + % testCase.verifyTrue(success); + + % conversion to literal in query + [result, success] = mathworks.adx.run('print d=dynamic({"a": datetime(1970-05-11)})'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}.a, '1970-05-11T00:00:00.0000000Z'); + + % just return the json + [result, success] = mathworks.adx.run('print d=dynamic({"a": datetime(1970-05-11)})', convertDynamics=false); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, '{"a":"1970-05-11T00:00:00.0000000Z"}'); + + [result, success] = mathworks.adx.run('print o=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.o{1}.a, 123); + testCase.verifyEqual(result.o{1}.b, 'hello'); + testCase.verifyEqual(result.o{1}.c, [1,2,3]'); + testCase.verifyTrue(isstruct(result.o{1}.d)); + testCase.verifyTrue(isempty(fieldnames(result.o{1}.d))); + + % null + [result, success] = mathworks.adx.run('print d=dynamic(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, missing); + + % primitive + [result, success] = mathworks.adx.run('print d=dynamic(4)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, 4); + + % array of literals + [result, success] = mathworks.adx.run('print d=dynamic([1, 2, "hello"])'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}{1}, 1); + testCase.verifyEqual(result.d{1}{2}, 2); + testCase.verifyEqual(result.d{1}{3}, 'hello'); + + % dynamic({"a":1, "b":{"a":2}}) is a property bag with two slots, a, and b, with the second slot being another property bag + [result, success] = mathworks.adx.run('print d=dynamic({"a":1, "b":{"a":2}})'); + testCase.verifyTrue(success); + testCase.verifyTrue(isstruct(result.d{1})); + testCase.verifyEqual(result.d{1}.a, 1); + testCase.verifyEqual(result.d{1}.b.a, 2); + + % parse a string value that follows the JSON encoding rules into a dynamic value, use the parse_json function + [result, success] = mathworks.adx.run("print d=parse_json('[43, 21, 65]')"); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, [43,21,65]'); + + [result, success] = mathworks.adx.run('print d=parse_json(''{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}'')'); + testCase.verifyTrue(success); + testCase.verifyTrue(isstruct(result.d{1})); + testCase.verifyEqual(result.d{1}.name, 'Alan'); + testCase.verifyEqual(result.d{1}.age, 21); + testCase.verifyEqual(result.d{1}.address.street, 432); + testCase.verifyEqual(result.d{1}.address.postcode, 'JLK32P'); + + [result, success] = mathworks.adx.run("print d=parse_json('21')"); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, 21); + + [result, success] = mathworks.adx.run("print d=parse_json('21')", convertDynamics=false); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, '21'); + + [result, success] = mathworks.adx.run('print d=parse_json(''"21"'')'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, '21'); + + [result, success] = mathworks.adx.run('print d=parse_json(''"21"'')', convertDynamics=false); + testCase.verifyTrue(success); + testCase.verifyEqual(result.d{1}, '21'); + end + + + function testNulls(testCase) + % bool + T = @() mathworks.adx.run('print bool(null)'); + testCase.verifyError(T, "adx:getRowsWithSchema"); + + [result, success] = mathworks.adx.run('print bool(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {missing}); + + [result, success] = mathworks.adx.run('print bool(null)', nullPolicy=mathworks.adx.NullPolicy.Convert2Double); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + % double + [result, success] = mathworks.adx.run('print double(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + [result, success] = mathworks.adx.run('print double(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + % datetime + [result, success] = mathworks.adx.run('print datetime(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), datetime(NaT, "TimeZone", "UTC")); + + [result, success] = mathworks.adx.run('print datetime(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), datetime(NaT, "TimeZone", "UTC")); + + % dynamic + [result, success] = mathworks.adx.run('print dynamic(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {missing}); + + [result, success] = mathworks.adx.run('print dynamic(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {missing}); + + % guid + [result, success] = mathworks.adx.run('print guid(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), missing); + + [result, success] = mathworks.adx.run('print guid(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), missing); + + % int + T = @() mathworks.adx.run('print int(null)'); + testCase.verifyError(T, "adx:getRowsWithSchema"); + + [result, success] = mathworks.adx.run('print int(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {missing}); + + [result, success] = mathworks.adx.run('print int(null)', nullPolicy=mathworks.adx.NullPolicy.Convert2Double); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + % long + T = @() mathworks.adx.run('print long(null)'); + testCase.verifyError(T, "adx:getRowsWithSchema"); + + [result, success] = mathworks.adx.run('print long(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {missing}); + + [result, success] = mathworks.adx.run('print long(null)', nullPolicy=mathworks.adx.NullPolicy.Convert2Double); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + % real + [result, success] = mathworks.adx.run('print real(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + [result, success] = mathworks.adx.run('print real(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), NaN); + + % time + durationNaN = duration(nan,nan,nan); + [result, success] = mathworks.adx.run('print time(null)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), durationNaN); + + [result, success] = mathworks.adx.run('print time(null)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), durationNaN); + end + + + function testVals(testCase) + [result, success] = mathworks.adx.run('print bool(true)', nullPolicy=mathworks.adx.NullPolicy.AllowAll); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), {true}); + + [result, success] = mathworks.adx.run('print bool(true)'); + testCase.verifyTrue(success); + testCase.verifyEqual(result.print_0(1), true); + end + end +end diff --git a/Software/MATLAB/test/unit/Adx/testQuery.m b/Software/MATLAB/test/unit/Adx/testQuery.m new file mode 100644 index 0000000..e9acaea --- /dev/null +++ b/Software/MATLAB/test/unit/Adx/testQuery.m @@ -0,0 +1,283 @@ +classdef (SharedTestFixtures={adxFixture}) testQuery < matlab.unittest.TestCase + % testQuery Unit testing for the query API + + % (c) 2023-2024 MathWorks, Inc. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% Please add your test cases below + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + properties + clusterName string + cluster adx.control.models.Cluster + state adx.control.models.ClusterProperties_1StateEnum + end + + methods (TestClassSetup) + function checkCluster(testCase) + disp("Running checkCluster"); + testCase.clusterName = getenv("ADXCLUSTERNAME"); + % Create a cluster object for the tests + if strlength(testCase.clusterName) > 1 + c = mathworks.adx.clustersGet(cluster=testCase.clusterName); + else + c = mathworks.adx.clustersGet(); + end + testCase.verifyClass(c, 'adx.control.models.Cluster'); + testCase.cluster = c; + + % Check cluster is already running + testCase.state = testCase.cluster.xproperties.state; + testCase.verifyClass(testCase.state, 'adx.control.models.ClusterProperties_1StateEnum'); + testCase.verifyEqual(testCase.state, adx.control.models.ClusterProperties_1StateEnum.Running); + + defaultCluster = mathworks.internal.adx.getDefaultConfigValue('cluster'); + mURI = matlab.net.URI(defaultCluster); + nameFields = split(mURI.Host, "."); + testCase.verifyEqual(nameFields(1), testCase.cluster.name); + end + end + + methods (TestMethodSetup) + function testSetup(testCase) %#ok + end + end + + methods (TestMethodTeardown) + function testTearDown(testCase) %#ok + end + end + + methods (Test) + function testHelloWorld(testCase) + disp("Running testHelloWorld"); + + request = adx.data.models.QueryRequest(); + testCase.verifyClass(request, 'adx.data.models.QueryRequest'); + colName = "myOutput"; + message = "Hello World"; + % set the KQL query + request.csl = sprintf('print %s="%s"', colName, message); + + % Don't set the database use the default in .json config file + % request.db = "testdb1" + % No adx.data.models.ClientRequestProperties required + % request.requestProperties + + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, result, response] = query.queryRun(request); %#ok + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + + + if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + hwTable = mathworks.internal.adx.queryV2Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); + else + error('Error running query: %s', request.csl); + end + end + + + function testKQLQuery(testCase) + disp("Running testKQLQuery"); + + [result, success, requestId] = mathworks.adx.KQLQuery('print mycol="Hello World"'); + + testCase.verifyTrue(success); + testCase.verifyEqual(36, strlength(requestId)); + testCase.verifyClass(result, 'table'); + testCase.verifyEqual(result.mycol(1), "Hello World"); + testCase.verifyEqual(1, width(result)); + testCase.verifyEqual(1, height(result)); + end + + + function testtSQLQuery(testCase) + disp("Running testtSQLQuery"); + + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.tSQLQuery('SELECT top(10) * FROM airlinesmall', nullPolicy=mathworks.adx.NullPolicy.AllowAll); %#ok + + testCase.verifyTrue(success); + testCase.verifyEqual(36, strlength(requestId)); + testCase.verifyClass(result, 'table'); + testCase.verifyEqual(result.DayOfWeek{1}, int32(3)); + testCase.verifyEqual(27, width(result)); + testCase.verifyEqual(10, height(result)); + testCase.verifyFalse(dataSetCompletion.HasErrors); + testCase.verifyFalse(dataSetCompletion.Cancelled); + testCase.verifyEmpty(dataSetCompletion.OneApiErrors) + end + + + function testProgressive(testCase) + disp("Running testProgressive"); + tableName = "RandomData"; + query = sprintf('%s | take 1000', tableName); + args = {"propertyNames", "results_progressive_enabled", "propertyValues", {true}, "verbose", false}; + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); %#ok + testCase.verifyTrue(success); + + % Non progressive version + [npResult, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run(query); %#ok + testCase.verifyTrue(success); + % Does progressive and non progressive give the same table + testCase.verifyEqual(result, npResult); + end + + + function testProgressiveParallel(testCase) + disp("Running testProgressiveParallel"); + tableName = "RandomData"; + query = sprintf('%s | take 1000', tableName); + args = {"propertyNames", "results_progressive_enabled", "propertyValues", {true}, "verbose", true, "useParallel", true, "parallelThreshold", 500}; + [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, args{:}); %#ok + testCase.verifyTrue(success); + + % Non progressive no parallel version + [npResult, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run(query); %#ok + testCase.verifyTrue(success); + % Does progressive and non progressive give the same table + testCase.verifyEqual(result, npResult); + end + + + function testV1QqueryHW(testCase) + disp("Running testV1QqueryHW"); + request = adx.data.models.QueryRequest(); + testCase.verifyClass(request, 'adx.data.models.QueryRequest'); + colName = "myOutput"; + message = "Hello World"; + % set the KQL query + request.csl = sprintf('print %s="%s"', colName, message); + + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, result, response] = query.queryRun(request, apiVersion="v1"); %#ok + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + + if code == matlab.net.http.StatusCode.OK + % Convert the response to Tables + [hwTable, otherTables] = mathworks.internal.adx.queryV1Response2Tables(result); + fprintf("Query (%s) result:\n", request.csl); + disp(hwTable); + testCase.verifyEqual(height(hwTable), 1); + testCase.verifyEqual(width(hwTable), 1); + testCase.verifyEqual(hwTable.Properties.VariableNames{1}, char(colName)); + testCase.verifyEqual(hwTable.(colName)(1), message); + testCase.verifyClass(otherTables, 'cell'); + testCase.verifyEqual(numel(otherTables), 3); + testCase.verifyClass(otherTables{1}, 'table'); + testCase.verifyClass(otherTables{2}, 'table'); + testCase.verifyClass(otherTables{3}, 'table'); + else + error('Error running query: %s', request.csl); + end + end + + + function testRandomDataV1(testCase) + disp("Running testRandomDataV1"); + tableName = "RandomData"; + request = adx.data.models.QueryRequest(); + queryStr = sprintf('%s | take 1000', tableName); + request.csl = queryStr; + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, resultRaw, response] = query.queryRun(request, apiVersion="v1"); %#ok + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + % Convert the response to Tables + [result, ~] = mathworks.internal.adx.queryV1Response2Tables(resultRaw); + % Non progressive v2 version + [npResult, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run(queryStr); %#ok + testCase.verifyTrue(success); + % Does progressive and non progressive give the same table + testCase.verifyEqual(result, npResult); + end + + + function testRandomDataV2skipResponseDecode(testCase) + disp("Running testRandomDataV2skipResponseDecode"); + tableName = "RandomData"; + request = adx.data.models.QueryRequest(); + queryStr = sprintf('%s | take 100', tableName); + request.csl = queryStr; + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, resultRaw, response, id] = query.queryRun(request, apiVersion="v2", skipResponseDecode=true); %#ok + testCase.verifyClass(id, "string"); + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + testCase.verifyEmpty(resultRaw); + testCase.verifyClass(resultRaw, "adx.data.models.QueryV2ResponseRaw"); + end + + + function testRandomDataV1skipResponseDecode(testCase) + disp("Running testRandomDataV1skipResponseDecode"); + tableName = "RandomData"; + request = adx.data.models.QueryRequest(); + queryStr = sprintf('%s | take 100', tableName); + request.csl = queryStr; + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, resultRaw, response, id] = query.queryRun(request, apiVersion="v1", skipResponseDecode=true); %#ok + testCase.verifyClass(id, "string"); + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + testCase.verifyEmpty(resultRaw); + testCase.verifyClass(resultRaw, "adx.data.models.QueryV1ResponseRaw"); + end + + + function testRandomDataV2skipRowsArrayDecode(testCase) + disp("Running testRandomDataV2skipRowsArrayDecode"); + tableName = "RandomData"; + request = adx.data.models.QueryRequest(); + queryStr = sprintf('%s | take 100', tableName); + request.csl = queryStr; + % Create the Query object and run the request + query = adx.data.api.Query(); + [code, resultRaw, response, id] = query.queryRun(request, apiVersion="v2", skipRowsArrayDecode=true); %#ok + testCase.verifyClass(id, "string"); + testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + testCase.verifyClass(resultRaw, "adx.data.models.QueryV2ResponseUnparsedRows"); + testCase.verifyEqual(resultRaw(3).TableName, "PrimaryResult"); + testCase.verifyEqual(numel(resultRaw(3).Rows), 1); + end + + + % Disable long running test + % function testReadAll(testCase) + % disp("testReadAll"); + % [tableNames, success, ~] = mathworks.adx.listTables(database="unittestdb"); + % testCase.verifyTrue(success); + % for n = 1:numel(tableNames) + % fprintf("Reading: %s\n",tableNames(n)); + % query = sprintf('table("%s", "all")', tableNames(n)); + % [result, success] = mathworks.adx.run(query, nullPolicy=mathworks.adx.NullPolicy.AllowAll, useParallel=true, verbose=true); %#ok + % testCase.verifyTrue(success); + % testCase.verifyTrue(istable(result)); + % fprintf("Rows: %d\n", height(result)); + % end + % end + + % function testAsync1(testCase) + % disp("Running testRandomDataV1"); + % tableName = "RandomData"; + % query = sprintf('%s | take 1000', tableName); + % % Create the Query object and run the request + % args = {"propertyNames", "async", "propertyValues", {true}, "verbose", true}; + % [result, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.KQLQuery(query, "verbose", true); %#ok + % + % [code, resultRaw, response] = query.queryRun(request, apiVersion="v1"); %#ok + % testCase.verifyEqual(code, matlab.net.http.StatusCode.OK); + % % Convert the response to Tables + % [result, ~] = mathworks.internal.adx.queryV1Response2Tables(resultRaw); + % % Non progressive v2 version + % [npResult, success, requestId, resultTables, dataSetHeader, dataSetCompletion] = mathworks.adx.run(queryStr); %#ok + % testCase.verifyTrue(success); + % % Does progressive and non progressive give the same table + % testCase.verifyEqual(result, npResult); + % end + end +end \ No newline at end of file diff --git a/Software/MATLAB/test/unit/Common/commonFixture.m b/Software/MATLAB/test/unit/Common/commonFixture.m index c9b6772..c45e864 100644 --- a/Software/MATLAB/test/unit/Common/commonFixture.m +++ b/Software/MATLAB/test/unit/Common/commonFixture.m @@ -1,39 +1,47 @@ classdef commonFixture < matlab.unittest.fixtures.Fixture % Writes the configuration files based on environment variables, this % facilities unit testing in CI/CD setups - + % Copyright 2022 The MathWorks, Inc. methods function setup(~) disp 'Writing Configuration Files' - % Create Configuration Files Based on Environment + + % Enable pretty printed JSON on >= 21a + if verLessThan('matlab','9.10') %#ok + prettyArgs = {}; + else + prettyArgs = {'PrettyPrint',true}; + end + + % Create Configuration Files Based on Environment configFile = fullfile(AzureCommonRoot, 'config', 'test_ConnectionString.json'); json = jsonencode(struct(... 'AuthMethod','ConnectionString',... 'ConnectionString',getenv('STORAGE_CONNECTION_STRING')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_StorageSharedKey.json'); json = jsonencode(struct(... 'AuthMethod','StorageSharedKey',... 'AccountKey',getenv('STORAGE_ACCOUNT_KEY'),... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_Environment.json'); json = jsonencode(struct(... 'AuthMethod','Environment',... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_DefaultAzure.json'); json = jsonencode(struct(... 'AuthMethod','DefaultAzure',... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); configFile = fullfile(AzureCommonRoot, 'config', 'test_InteractiveBrowser.json'); @@ -44,9 +52,9 @@ function setup(~) 'RedirectUrl',getenv('COMMON_REDIRECT_URI'),... 'TokenCachePersistenceOptions',struct('Name','InteractiveBrowser'),... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_ClientSecret.json'); json = jsonencode(struct(... 'AuthMethod','ClientSecret',... @@ -54,9 +62,9 @@ function setup(~) 'ClientId',getenv('AZURE_CLIENT_ID'),... 'ClientSecret',getenv('AZURE_CLIENT_SECRET'),... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_ClientCertificate.json'); certFile = fullfile(AzureCommonRoot, 'config', 'test_cert.pem'); json = jsonencode(struct(... @@ -65,7 +73,7 @@ function setup(~) 'ClientId',getenv('AZURE_CLIENT_ID'),... 'PemCertificate',certFile,... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); f = fopen(certFile,'w'); fwrite(f,matlab.net.base64decode(getenv('AZURE_CLIENT_CERTIFICATE')));fclose(f); @@ -77,15 +85,15 @@ function setup(~) 'Scopes',{{'https://storage.azure.com/.default'}},... 'TokenCachePersistenceOptions',struct('Name','DeviceCode'),... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); + ),prettyArgs{:}); f = fopen(configFile,'w'); fwrite(f,json);fclose(f); - + configFile = fullfile(AzureCommonRoot, 'config', 'test_AzureCli.json'); json = jsonencode(struct(... 'AuthMethod','AzureCli',... 'AccountName',getenv('STORAGE_ACCOUNT_NAME')... - )); - f = fopen(configFile,'w'); fwrite(f,json);fclose(f); + ),prettyArgs{:}); + f = fopen(configFile,'w'); fwrite(f,json);fclose(f); end function teardown(~) diff --git a/Software/OpenAPI/.gitignore b/Software/OpenAPI/.gitignore new file mode 100644 index 0000000..1f81b22 --- /dev/null +++ b/Software/OpenAPI/.gitignore @@ -0,0 +1,3 @@ +adxClient +generated +openapitools.json diff --git a/Software/OpenAPI/buildAdxControlPlaneClient.m b/Software/OpenAPI/buildAdxControlPlaneClient.m new file mode 100644 index 0000000..b95b797 --- /dev/null +++ b/Software/OpenAPI/buildAdxControlPlaneClient.m @@ -0,0 +1,126 @@ + +function tf = buildAdxControlPlaneClient(options) + %BUILDADXCONTROLPLANECLIENT builds an Azure Data Explorer Control Plane + + % (c) 2023-2024 The MathWorks Inc."; + + arguments + % Kusto spec url, repo: https://github.com/Azure/azure-rest-api-specs/tree/main/specification/azure-kusto/ + %options.inputSpec string {mustBeTextScalar} = "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/azure-kusto/resource-manager/Microsoft.Kusto/stable/2023-05-02/kusto.json"; + options.inputSpec string {mustBeTextScalar} = fullfile(char(java.lang.System.getProperty('user.home')), 'git', "azure-rest-api-specs", "specification", "azure-kusto", "resource-manager", "Microsoft.Kusto", "stable", "2023-05-02", "kusto.json"); + % Assumes OpenAPI Code in $HOME/git/openapicodegen + options.codegenPath string {mustBeTextScalar} = fullfile(char(java.lang.System.getProperty('user.home')), 'git', 'openapicodegen'); + % Directory where the autorest command can be found + options.autorestPath string {mustBeTextScalar} = fullfile(char(java.lang.System.getProperty('user.home')), ".nvm", "versions", "node", "v16.15.1", "bin"); + % Directory where the npx command can be found + options.npxPath string {mustBeTextScalar} = fullfile(char(java.lang.System.getProperty('user.home')), ".nvm", "versions", "node", "v16.15.1", "bin"); + % Directory where the node command can be found + options.nodePath string {mustBeTextScalar} = fullfile(char(java.lang.System.getProperty('user.home')), ".nvm", "versions", "node", "v16.15.1", "bin"); + end + + % If startup has been run the in the Software/MATLAB dir can skip this + if ~(exist('adxRoot.m', 'file') == 2) + rootStr = fileparts(fileparts(fileparts(mfilename('fullpath')))); + adxStartup = fullfile(rootStr, 'Software', 'MATLAB', 'startup.m'); + if isfile(adxStartup) + run(adxStartup); + else + error('ADX:buildAdxControlPlaneClient', 'Azure Data Explorer startup.m not found: %s', adxStartup); + end + end + + % Run startup to configure the package's MATLAB paths + codegenStartup = fullfile(options.codegenPath, 'Software', 'MATLAB', 'startup.m'); + if isfile(codegenStartup) + run(codegenStartup); + else + error('ADX:buildAdxControlPlaneClient', 'OpenAPI code generation startup.m not found: %s', codegenStartup); + end + + % Don't error if autorest itself is included in the path + if endsWith(options.autorestPath, 'autorest') + autorestCmd = options.autorestPath; + else + autorestCmd = fullfile(options.autorestPath, 'autorest'); + end + [status,cmdout] = system(autorestCmd + " --version"); + if status ~= 0 || ~startsWith(cmdout, "AutoRest code generation utility [cli version: ") + error('ADX:buildAdxControlPlaneClient', 'autorest not found: %s', autorestCmd); + end + + % npx autorest --output-converted-oai3 --input-file=/home//git/azure-rest-api-specs/specification/machinelearning/resource-manager/Microsoft.MachineLearning/stable/2019-10-01/workspaces.json + % localKusto2 = websave('kusto2.json', options.specURL); + %% TODO review running in azure-rest-api-specs/specification/azure-kusto/resource-manager + if ~isfile(options.inputSpec) + error('ADX:buildAdxControlPlaneClient', 'Input spec not found: %s', options.inputSpec); + end + + convCmd = autorestCmd + " --output-converted-oai3 --input-file=" + options.inputSpec; + [status, cmdout] = system(convCmd); + if status ~= 0 + error('ADX:buildAdxControlPlaneClient', 'autorest conversion failed:\n%s\n', cmdout); + end + % Expected generated spec + + specStrFields = split(string(options.inputSpec), filesep); + dateField = specStrFields(end-1); + specV3 = fullfile(pwd, "generated", "azure-kusto", "resource-manager", "Microsoft.Kusto", "stable", dateField, "kusto.json"); + if ~isfile(specV3) + error('ADX:buildAdxControlPlaneClient', 'Expected converted v3.x spec file not found: %s', specV3); + end + + % Create a builder object + c = openapi.build.Client; + % Set the package name, defaults to "OpenAPIClient" + c.packageName = "control"; + % Set the path to the spec., this may also be a HTTP URL + c.inputSpec = specV3; + % Set a directory where the results will be stored + c.output = fullfile(pwd, "adxClient"); + % Pass a string containing some additional arguments to the openapi-generator-cli + c.skipValidateSpec = true; + % Insert a copyright notice in generated code + c.copyrightNotice = "% (c) 2023 MathWorks Inc."; + % set the npx & node paths + c.npxPath = options.npxPath; + c.nodePath = options.nodePath; + % Trigger the build process + c.build; + + controlSrc = fullfile(c.output, "+" + c.packageName); + apiSrc = fullfile(controlSrc, "+api"); + if ~isfolder(apiSrc) + error('ADX:buildAdxControlPlaneClient', 'Expected api folder not found: %s', apiSrc); + end + modelSrc = fullfile(controlSrc, "+models"); + if ~isfolder(modelSrc) + error('ADX:buildAdxControlPlaneClient', 'Expected models folder not found: %s', modelSrc); + end + + dst = mathworks.adx.adxRoot("app", "system", "+adx", "+control"); + [status, msg] = mkdir(dst); + if status ~= 1 + error('ADX:buildAdxControlPlaneClient', 'mkdir failed: %s\n%s', dst, msg); + end + + apiDst = fullfile(dst, "+api"); + [status, msg] = copyfile(apiSrc, apiDst); + if status ~= 1 + error('ADX:buildAdxControlPlaneClient', '+api copyfile failed, source: %s destination:%s\n%s', apiSrc, apiDst, msg); + end + modelsDst = fullfile(dst, "+models"); + [status, msg] = copyfile(modelSrc, modelsDst); + if status ~= 1 + error('ADX:buildAdxControlPlaneClient', '+api copyfile failed, source: %s destination:%s\n%s', modelSrc, modelsDst, msg); + end + + miscList = dir(controlSrc + filesep +"*.m"); + for n = 1:numel(miscList) + src = fullfile(miscList(n).folder, miscList(n).name); + [status, msg] = copyfile(src, dst); + if status ~= 1 + error('ADX:buildAdxControlPlaneClient', '.m copyfile failed, source: %s, destination: %s\n%s', src, dst, msg); + end + end + tf = true; +end \ No newline at end of file diff --git a/VERSION b/VERSION index d15723f..7dea76e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.2 +1.0.1