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));
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }
Beispiel #10
0
        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));
        }