3491 Kusto Execute Function support (#1055)

* 3491 Added GenerateExecuteFunctionScript to IDataSource, DataSourceBase, and KustoDataSource. Added ExecutionFunction to Scripter and IScripter.

* 3491 Refactored GenerateScriptForFunction in ScriptAsScriptingOperation to handle execute and alter
This commit is contained in:
Justin M
2020-08-26 14:45:21 -07:00
committed by GitHub
parent 3f725b5aec
commit 26cc913c61
6 changed files with 43 additions and 8 deletions

View File

@@ -105,6 +105,8 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
public abstract string GenerateAlterFunctionScript(string functionName);
public abstract string GenerateExecuteFunctionScript(string functionName);
/// <inheritdoc/>
public DataSourceType DataSourceType { get; protected set; }

View File

@@ -123,10 +123,17 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
bool Exists(DataSourceObjectMetadata objectMetadata);
/// <summary>
/// Gets FunctionInfo object for a function
/// Generates an alter script for a function
/// </summary>
/// <param name="functionName"></param>
/// <returns></returns>
string GenerateAlterFunctionScript(string functionName);
/// <summary>
/// Generates an execute script for a function
/// </summary>
/// <param name="functionName"></param>
/// <returns></returns>
string GenerateExecuteFunctionScript(string functionName);
}
}

View File

@@ -1047,6 +1047,15 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
return alterCommand.ToString();
}
public override string GenerateExecuteFunctionScript(string functionName)
{
var functionInfo = GetFunctionInfo(functionName);
return functionInfo == null
? string.Empty
: $"{functionInfo.Name}{functionInfo.Parameters}";
}
private string GenerateMetadataKey(string databaseName, string objectName)
{
return string.IsNullOrWhiteSpace(objectName) ? databaseName : $"{databaseName}.{objectName}";

View File

@@ -8,5 +8,6 @@ namespace Microsoft.Kusto.ServiceLayer.Scripting
{
string SelectFromTableOrView(IDataSource dataSource, Urn urn);
string AlterFunction(IDataSource dataSource, ScriptingObject scriptingObject);
string ExecuteFunction(IDataSource dataSource, ScriptingObject scriptingObject);
}
}

View File

@@ -71,7 +71,7 @@ namespace Microsoft.Kusto.ServiceLayer.Scripting
// TODO: Not including the header by default. We have to get this option from client
options.IncludeHeaders = false;
// Scripting data is not avaialable in the scripter
// Scripting data is not available in the scripter
options.ScriptData = false;
SetScriptingOptions(options);
@@ -82,7 +82,8 @@ namespace Microsoft.Kusto.ServiceLayer.Scripting
break;
case ScriptingOperationType.Alter:
resultScript = GenerateScriptAlter(DataSource, urns);
case ScriptingOperationType.Execute:
resultScript = GenerateScriptForFunction(DataSource);
break;
}
@@ -153,16 +154,25 @@ namespace Microsoft.Kusto.ServiceLayer.Scripting
return string.Empty;
}
private string GenerateScriptAlter(IDataSource dataSource, UrnCollection urns)
private string GenerateScriptForFunction(IDataSource dataSource)
{
ScriptingObject scriptingObject = this.Parameters.ScriptingObjects[0];
Urn objectUrn = urns[0];
if (string.Equals(scriptingObject.Type, "Function", StringComparison.CurrentCultureIgnoreCase))
if (!string.Equals(scriptingObject.Type, "Function", StringComparison.CurrentCultureIgnoreCase))
{
return _scripter.AlterFunction(dataSource, scriptingObject);
return string.Empty;
}
if (Parameters.Operation == ScriptingOperationType.Alter)
{
return _scripter.AlterFunction(dataSource, scriptingObject);
}
if (Parameters.Operation == ScriptingOperationType.Execute)
{
return _scripter.ExecuteFunction(dataSource, scriptingObject);
}
return string.Empty;
}

View File

@@ -32,5 +32,11 @@ namespace Microsoft.Kusto.ServiceLayer.Scripting
var functionName = scriptingObject.Name.Substring(0, scriptingObject.Name.IndexOf('('));
return dataSource.GenerateAlterFunctionScript(functionName);
}
public string ExecuteFunction(IDataSource dataSource, ScriptingObject scriptingObject)
{
var functionName = scriptingObject.Name.Substring(0, scriptingObject.Name.IndexOf('('));
return dataSource.GenerateExecuteFunctionScript(functionName);
}
}
}