internal static CommandBase FromCode(SyntaxElement rootElement) { var tableNameDeclaration = rootElement.GetUniqueDescendant <NameDeclaration>( "Table Name", n => n.NameInParent == "TableName"); var mappingNameExpression = rootElement.GetUniqueDescendant <LiteralExpression>( "Mapping Name", n => n.NameInParent == "MappingName"); var mappingKindToken = rootElement.GetUniqueDescendant <SyntaxToken>( "Mapping Kind", n => n.NameInParent == "MappingKind"); var mappingFormatExpression = rootElement.GetUniqueDescendant <LiteralExpression>( "Mapping Format", n => n.NameInParent == "MappingFormat"); var mappingFormatFirstPart = QuotedText.FromLiteral(mappingFormatExpression); var mappingFormatExtraParts = rootElement .GetDescendants <CompoundStringLiteralExpression>() .SelectMany(c => c.Tokens) .Select(t => QuotedText.FromToken(t)); var mappingFormatParts = mappingFormatExtraParts .Prepend(mappingFormatFirstPart) .Select(q => q.Text); var mappingFormat = string.Concat(mappingFormatParts); var command = new CreateMappingCommand( EntityName.FromCode(tableNameDeclaration), mappingKindToken.Text, QuotedText.FromLiteral(mappingNameExpression), QuotedText.FromText(mappingFormat) !); return(command); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var functionName = EntityName.FromCode( rootElement.GetUniqueDescendant <SyntaxElement>( "Function Name", e => e.NameInParent == "FunctionName")); var functionDeclaration = rootElement .GetAtLeastOneDescendant <FunctionDeclaration>("Function declaration") .First(); var body = TrimFunctionSchemaBody(functionDeclaration.Body.ToString()); var parameters = functionDeclaration .Parameters .Parameters .Select(p => p.Element) .Select(fp => GetParameter(fp)); var folder = GetProperty(rootElement, SyntaxKind.FolderKeyword); var docString = GetProperty(rootElement, SyntaxKind.DocStringKeyword); return(new CreateFunctionCommand( functionName, parameters, body, folder, docString)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var tableName = rootElement.GetUniqueDescendant <NameDeclaration>( "TableName", n => n.NameInParent == "TableName"); var folder = GetProperty(rootElement, SyntaxKind.FolderKeyword); var docString = GetProperty(rootElement, SyntaxKind.DocStringKeyword); var columns = rootElement .GetDescendants <NameDeclaration>(n => n.NameInParent == "ColumnName") .Select(n => n.Parent) .Select(n => new { Name = n.GetUniqueDescendant <NameDeclaration>("Table column name"), Type = n.GetUniqueDescendant <PrimitiveTypeExpression>("Table column type") }) .Select(c => new TableColumn( EntityName.FromCode(c.Name), c.Type.Type.Text)); return(new CreateTableCommand( EntityName.FromCode(tableName), columns, folder, docString)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var entityKinds = rootElement .GetDescendants <SyntaxElement>(s => s.Kind == SyntaxKind.TableKeyword || s.Kind == SyntaxKind.DatabaseKeyword) .Select(s => s.Kind); if (!entityKinds.Any()) { throw new DeltaException("Alter retention policy requires to act on a table or database (cluster isn't supported)"); } var entityKind = entityKinds.First(); var entityType = entityKind == SyntaxKind.TableKeyword ? EntityType.Table : EntityType.Database; var entityName = rootElement.GetDescendants <NameReference>().Last(); var policyText = QuotedText.FromLiteral( rootElement.GetUniqueDescendant <LiteralExpression>( "RetentionPolicy", e => e.NameInParent == "RetentionPolicy")); var policy = Deserialize <JsonDocument>(policyText.Text); if (policy == null) { throw new DeltaException( $"Can't extract policy objects from {policyText.ToScript()}"); } return(new AlterRetentionPolicyCommand( entityType, EntityName.FromCode(entityName.Name), policy)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var cleanTableName = rootElement .GetDescendants <TokenName>(e => e.NameInParent == "Name") .FirstOrDefault(); var tableName = rootElement.GetDescendants <NameReference>().Last(); if ((cleanTableName == null || cleanTableName.Name.Text == string.Empty) && tableName == null) { throw new DeltaException("Can't find table name"); } var policiesText = QuotedText.FromLiteral( rootElement.GetUniqueDescendant <LiteralExpression>( "UpdatePolicy", e => e.NameInParent == "UpdatePolicy")); var policies = Deserialize <UpdatePolicy[]>(policiesText.Text); if (policies == null) { throw new DeltaException( $"Can't extract policy objects from {policiesText.ToScript()}"); } return(new AlterUpdatePolicyCommand( EntityName.FromCode(tableName.Name), policies)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var nameReference = rootElement.GetUniqueDescendant <NameReference>( "FunctionName", n => n.NameInParent == "FunctionName"); return(new DropFunctionCommand(new EntityName(nameReference.Name.SimpleName))); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var tableNameReference = rootElement.GetUniqueDescendant <NameReference>( "Table Name", n => n.NameInParent == "TableName"); var mappingNameExpression = rootElement.GetUniqueDescendant <LiteralExpression>( "Mapping Name", n => n.NameInParent == "MappingName"); var mappingKindToken = rootElement.GetUniqueDescendant <SyntaxToken>( "Mapping Kind", n => n.NameInParent == "MappingKind"); var command = new DropMappingCommand( new EntityName(tableNameReference.SimpleName), mappingKindToken.Text, QuotedText.FromLiteral(mappingNameExpression)); return(command); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var tableNameReference = rootElement.GetUniqueDescendant <NameReference>( "Table name", n => n.NameInParent == "TableName"); var columnNameReferences = rootElement.GetDescendants <NameReference>( n => n.NameInParent != "TableName"); var tableName = new EntityName(tableNameReference.Name.SimpleName); var columnNames = columnNameReferences .Select(n => new EntityName(n.Name.SimpleName)) .ToImmutableArray(); return(new DropTableColumnsCommand(tableName, columnNames)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var nameReferences = rootElement.GetDescendants <NameReference>(); if (nameReferences.Count != 2) { throw new DeltaException($"Expected 2 names but got {nameReferences.Count}"); } var tableName = new EntityName(nameReferences[0].Name.SimpleName); var columnName = new EntityName(nameReferences[1].Name.SimpleName); var typeExpression = rootElement.GetUniqueDescendant <PrimitiveTypeExpression>("Primitive type"); var type = typeExpression.Type.ValueText; return(new AlterColumnTypeCommand(tableName, columnName, type)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var tableName = rootElement.GetDescendants <NameReference>().Last(); var policyText = QuotedText.FromLiteral( rootElement.GetUniqueDescendant <LiteralExpression>( "AutoDeletePolicy", e => e.NameInParent == "AutoDeletePolicy")); var policy = Deserialize <JsonDocument>(policyText.Text); if (policy == null) { throw new DeltaException( $"Can't extract policy objects from {policyText.ToScript()}"); } return(new AlterAutoDeletePolicyCommand(EntityName.FromCode(tableName.Name), policy)); }
internal static CommandBase FromCode(SyntaxElement rootElement) { var tableNames = rootElement .GetDescendants <SyntaxElement>(n => n.NameInParent == "Name" // Different type depending if it's a simple name or not && (n is TokenName || n is LiteralExpression)) //.GetDescendants<LiteralExpression>(n => n.NameInParent == "Name") //.GetDescendants<TokenName>(n => n.NameInParent == "Name") .Select(t => EntityName.FromCode(t)); var policyText = QuotedText.FromLiteral( rootElement.GetUniqueDescendant <LiteralExpression>( "RetentionPolicy", e => e.NameInParent == "RetentionPolicy")); var policy = Deserialize <JsonDocument>(policyText.Text); if (policy == null) { throw new DeltaException( $"Can't extract policy objects from {policyText.ToScript()}"); } return(new AlterTablesRetentionPolicyCommand(tableNames, policy)); }