Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions SqlScriptDom/Parser/TSql/Ast.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1388,7 +1388,8 @@
<Member Name="Name" Type="Identifier" Summary="The external model name."/>
<Member Name="Location" Type="Literal" Summary="The external model location name."/>
<Member Name="ApiFormat" Type="Literal" Summary="The external model api format name."/>
<Member Name="ModelType" Type="ExternalModelTypeOption" Summary="The external model type name."/>
<Member Name="ModelType" Type="ExternalModelTypeOption?" GenerateUpdatePositionInfoCall="false" Summary="The external model type name. Retained for backward compatibility; prefer ModelTypeSpecification."/>
<Member Name="ModelTypeSpecification" Type="ExternalModelTypeSpecification" Summary="The MODEL_TYPE option as a visitable fragment."/>
<Member Name="ModelName" Type="Literal" Summary="The external model name to be used to generate embeddings."/>
<Member Name="Credential" Type="Identifier" Summary="The external model credentials name."/>
<Member Name="Parameters" Type="Literal" Summary="The external model parameters as key-value pairs."/>
Expand All @@ -1404,8 +1405,8 @@
<Class Name="AlterExternalModelStatement" Base="ExternalModelStatement" Summary="Represents a ALTER EXTERNAL MODEL statement.">
<InheritedClass Name="ExternalModelStatement"/>
</Class>
<Class Name="ExternalModelTypeOption" Base="TSqlFragment" Summary="Represents the MODEL_TYPE option in CREATE/ALTER EXTERNAL MODEL.">
<Member Name="OptionKind" Type="ExternalModelTypeOptionKind" GenerateUpdatePositionInfoCall="false" Summary="The option kind."/>
<Class Name="ExternalModelTypeSpecification" Base="TSqlFragment" Summary="Represents the MODEL_TYPE option in CREATE/ALTER EXTERNAL MODEL.">
<Member Name="OptionKind" Type="ExternalModelTypeOption" GenerateUpdatePositionInfoCall="false" Summary="The option kind."/>
</Class>

<Class Name="ExternalFileFormatStatement" Abstract="true" Base="TSqlStatement" Summary="Base class for all external file format statement objects.">
Expand Down
9 changes: 4 additions & 5 deletions SqlScriptDom/Parser/TSql/ExternalModelTypeOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@ namespace Microsoft.SqlServer.TransactSql.ScriptDom
#pragma warning disable 1591

/// <summary>
/// The enumeration specifies the external model type
/// Currently, we support Embeddings only.
/// The enumeration specifies the external model type.
/// Currently, we support EMBEDDINGS only.
/// </summary>
public enum ExternalModelTypeOptionKind
public enum ExternalModelTypeOption
{
/// <summary>
/// MODEL_TYPE = EMBEDDINGS
/// </summary>
Embeddings = 0,

EMBEDDINGS = 0,
}

#pragma warning restore 1591
Expand Down
15 changes: 8 additions & 7 deletions SqlScriptDom/Parser/TSql/TSql170.g
Original file line number Diff line number Diff line change
Expand Up @@ -24171,25 +24171,26 @@ StringLiteral vApiFormat;

externalModelModelType[ExternalModelStatement vParent]
{
ExternalModelTypeOption vModelTypeOption = null;
ExternalModelTypeSpecification vModelTypeSpec = null;
}
:
tModelType:Identifier
{
Match(tModelType, CodeGenerationSupporter.ModelType);
vModelTypeOption = this.FragmentFactory.CreateFragment<ExternalModelTypeOption>();
UpdateTokenInfo(vModelTypeOption, tModelType);
vModelTypeSpec = this.FragmentFactory.CreateFragment<ExternalModelTypeSpecification>();
UpdateTokenInfo(vModelTypeSpec, tModelType);
}
EqualsSign
(
tEmbeddings:Identifier
{
if (TryMatch(tEmbeddings, CodeGenerationSupporter.Embeddings))
{
vModelTypeOption.OptionKind = ExternalModelTypeOptionKind.Embeddings;
UpdateTokenInfo(vModelTypeOption, tEmbeddings);
vParent.ModelType = vModelTypeOption;
vParent.UpdateTokenInfo(vModelTypeOption);
vModelTypeSpec.OptionKind = ExternalModelTypeOption.EMBEDDINGS;
UpdateTokenInfo(vModelTypeSpec, tEmbeddings);
vParent.ModelTypeSpecification = vModelTypeSpec;
vParent.ModelType = ExternalModelTypeOption.EMBEDDINGS;
vParent.UpdateTokenInfo(vModelTypeSpec);
}
else
{
Expand Down
15 changes: 8 additions & 7 deletions SqlScriptDom/Parser/TSql/TSql180.g
Original file line number Diff line number Diff line change
Expand Up @@ -24400,25 +24400,26 @@ StringLiteral vApiFormat;

externalModelModelType[ExternalModelStatement vParent]
{
ExternalModelTypeOption vModelTypeOption = null;
ExternalModelTypeSpecification vModelTypeSpec = null;
}
:
tModelType:Identifier
{
Match(tModelType, CodeGenerationSupporter.ModelType);
vModelTypeOption = this.FragmentFactory.CreateFragment<ExternalModelTypeOption>();
UpdateTokenInfo(vModelTypeOption, tModelType);
vModelTypeSpec = this.FragmentFactory.CreateFragment<ExternalModelTypeSpecification>();
UpdateTokenInfo(vModelTypeSpec, tModelType);
}
EqualsSign
(
tEmbeddings:Identifier
{
if (TryMatch(tEmbeddings, CodeGenerationSupporter.Embeddings))
{
vModelTypeOption.OptionKind = ExternalModelTypeOptionKind.Embeddings;
UpdateTokenInfo(vModelTypeOption, tEmbeddings);
vParent.ModelType = vModelTypeOption;
vParent.UpdateTokenInfo(vModelTypeOption);
vModelTypeSpec.OptionKind = ExternalModelTypeOption.EMBEDDINGS;
UpdateTokenInfo(vModelTypeSpec, tEmbeddings);
vParent.ModelTypeSpecification = vModelTypeSpec;
vParent.ModelType = ExternalModelTypeOption.EMBEDDINGS;
vParent.UpdateTokenInfo(vModelTypeSpec);
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,26 @@ protected void GenerateAlterExternalModelStatementBody(AlterExternalModelStateme
}

// external model Model Type options
if (node.ModelType != null)
if (node.ModelTypeSpecification != null)
{
if (!ifFirst)
{
GenerateSymbol(TSqlTokenType.Comma);
}
ifFirst = false;
NewLine();
GenerateFragmentIfNotNull(node.ModelType);
GenerateFragmentIfNotNull(node.ModelTypeSpecification);
}
else if (node.ModelType != null)
{
if (!ifFirst)
{
GenerateSymbol(TSqlTokenType.Comma);
}
ifFirst = false;
NewLine();
string externalModelTypeOption = GetValueForEnumKey(_externalModelTypeOption, node.ModelType.Value);
GenerateNameEqualsValue(CodeGenerationSupporter.ModelType, externalModelTypeOption);
}

// external model name options
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ public override void ExplicitVisit(CreateExternalModelStatement node)
GenerateSpaceAndIdentifier(CodeGenerationSupporter.Model);
GenerateCreateExternalModelStatementBody(node);
}
protected static Dictionary<ExternalModelTypeOptionKind, string> _externalModelTypeOptionKind = new Dictionary<ExternalModelTypeOptionKind, string>()
protected static Dictionary<ExternalModelTypeOption, string> _externalModelTypeOption = new Dictionary<ExternalModelTypeOption, string>()
{
{ExternalModelTypeOptionKind.Embeddings, CodeGenerationSupporter.Embeddings}
{ExternalModelTypeOption.EMBEDDINGS, CodeGenerationSupporter.Embeddings}
};

protected void GenerateCreateExternalModelStatementBody(CreateExternalModelStatement node)
Expand Down Expand Up @@ -54,15 +54,26 @@ protected void GenerateCreateExternalModelStatementBody(CreateExternalModelState
}

// external model Model Type options
if (node.ModelType != null)
if (node.ModelTypeSpecification != null)
{
if (!ifFirst)
{
GenerateSymbol(TSqlTokenType.Comma);
}
ifFirst = false;
NewLine();
GenerateFragmentIfNotNull(node.ModelType);
GenerateFragmentIfNotNull(node.ModelTypeSpecification);
}
else if (node.ModelType != null)
{
if (!ifFirst)
{
GenerateSymbol(TSqlTokenType.Comma);
}
ifFirst = false;
NewLine();
string externalModelTypeOption = GetValueForEnumKey(_externalModelTypeOption, node.ModelType.Value);
GenerateNameEqualsValue(CodeGenerationSupporter.ModelType, externalModelTypeOption);
}

// external model name options
Expand Down Expand Up @@ -117,9 +128,9 @@ protected void GenerateCreateExternalModelStatementBody(CreateExternalModelState
GenerateKeyword(TSqlTokenType.RightParenthesis);
}

public override void ExplicitVisit(ExternalModelTypeOption node)
public override void ExplicitVisit(ExternalModelTypeSpecification node)
{
string optionKindString = GetValueForEnumKey(_externalModelTypeOptionKind, node.OptionKind);
string optionKindString = GetValueForEnumKey(_externalModelTypeOption, node.OptionKind);
GenerateNameEqualsValue(CodeGenerationSupporter.ModelType, optionKindString);
}
}
Expand Down
16 changes: 11 additions & 5 deletions Test/SqlDom/Only170SyntaxTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -407,18 +407,24 @@ public void TestExternalModelModelTypeVisitor()
Assert.IsNotNull(fragment);

// Collect all visited fragments using a custom visitor
var visitor = new ExternalModelTypeOptionVisitor();
var visitor = new ExternalModelTypeSpecificationVisitor();
fragment.Accept(visitor);

Assert.AreEqual(1, visitor.VisitedOptions.Count);
Assert.AreEqual(ExternalModelTypeOptionKind.Embeddings, visitor.VisitedOptions[0].OptionKind);
Assert.AreEqual(ExternalModelTypeOption.EMBEDDINGS, visitor.VisitedOptions[0].OptionKind);

// Legacy enum member must still be populated for backward compatibility
var createStatement = ((TSqlScript)fragment).Batches[0].Statements[0] as CreateExternalModelStatement;
Assert.IsNotNull(createStatement);
Assert.AreEqual(ExternalModelTypeOption.EMBEDDINGS, createStatement.ModelType);
Assert.IsNotNull(createStatement.ModelTypeSpecification);
}

private class ExternalModelTypeOptionVisitor : TSqlFragmentVisitor
private class ExternalModelTypeSpecificationVisitor : TSqlFragmentVisitor
{
public List<ExternalModelTypeOption> VisitedOptions { get; } = new List<ExternalModelTypeOption>();
public List<ExternalModelTypeSpecification> VisitedOptions { get; } = new List<ExternalModelTypeSpecification>();

public override void Visit(ExternalModelTypeOption node)
public override void Visit(ExternalModelTypeSpecification node)
{
VisitedOptions.Add(node);
base.Visit(node);
Expand Down
Loading