/// <summary>
        /// Visits the given <paramref name="addTableNode"/>.
        /// </summary>
        /// <param name="addTableNode"></param>
        public override void Visit(IAddTableNode addTableNode)
        {
            //
            // If table has "primary-key" property set to "false", no not
            // resolve PK for it
            if(addTableNode.Properties[MdlSyntax.PrimaryKey] != null &&
                AstNodePropertyUtil.AsString(addTableNode.Properties, MdlSyntax.PrimaryKey) == "false")
                return;

            //
            // Iterate through IAddColumnNode children to see if there's a PK specified. If there is one
            // no default PK should be added.
            foreach(IAddColumnNode addColumnNode in Filter<IAddColumnNode>(addTableNode.ChildNodes))
            {
                //
                // We can't use Environment.Resolve here since no bindings were 
                // built yet. Rely on raw properties instead
                if(addColumnNode.Properties[MdlSyntax.PrimaryKey] != null &&
                    AstNodePropertyUtil.AsString(addColumnNode.Properties, MdlSyntax.PrimaryKey) == "true")
                    return;
            } // foreach

            if(defaultPrimaryKeyNode == null)
                return;

            //
            // Create an IAddColumnNode and copy all properties from the default PK...
            IAddColumnNode addPrimaryKeyColumnNode = new AddColumnNode(addTableNode, defaultPrimaryKeyNode.Name);
            foreach(IAstNodeProperty astNodeProperty in MergeableProperties(defaultPrimaryKeyNode.Properties))
                addPrimaryKeyColumnNode.Properties.AddProperty(astNodeProperty);

            //
            // Add it to the front...
            addTableNode.ChildNodes.Insert(0, addPrimaryKeyColumnNode);
        }
예제 #2
0
        private void BuildAddColumnNode(IColumnDefinition column, IAddTableNode parent)
        {
            IAddColumnNode addColumnNode = new AddColumnNode(parent, column.Name);
            parent.ChildNodes.Add(addColumnNode);

            SemanticModelUtil.Copy(column, addColumnNode);
        }
        /// <summary>
        /// Visits the given <paramref name="addTableNode"/>.
        /// </summary>
        /// <param name="addTableNode"></param>
        public override void Visit(IAddTableNode addTableNode)
        {
            //
            // Create TableDefinition for the IAddTableNode we have
            TableDefinition table = new TableDefinition(addTableNode.Name);
            Environment.Schema.AddTable(table);

            base.Visit(addTableNode);
        }
        public override void Visit(IAddTableNode addTableNode)
        {
            /*var table = Environment.Schema.GetTable(addTableNode.Name);
            if(table == null)
                throw new MigrationException(string.Format("Could not resolve table '{0}' (at {1})",
                    addTableNode.Name, addTableNode.Location));*/

            TextWriter.WriteLine("create table {0} (", EscapeIdentifier(addTableNode.Name));

            var definitions = 
                Join("," + System.Environment.NewLine,
                    addTableNode.
                        ChildNodes.OfType<IAddColumnNode>().
                        Select(c => GetAddColumnDefinition(c)).
                        Union(GetConstraintsDefinitions(addTableNode)));

            TextWriter.WriteLine(definitions);

            TextWriter.WriteLine(");");
        }
        /// <summary>
        /// Visits the given <paramref name="addTableNode"/>.
        /// </summary>
        /// <param name="addTableNode"></param>
        public override void Visit(IAddTableNode addTableNode)
        {
            IncludeTemplates(addTableNode);

            //
            // If neither "template" nor "templates" properties specified on the node, skip it
            if(addTableNode.Properties[MdlSyntax.Template] == null &&
                addTableNode.Properties[MdlSyntax.Templates] == null)
                return;

            if(addTableNode.Properties[MdlSyntax.Template] != null)
            {
                SubstituteTemplate(addTableNode, AstNodePropertyUtil.AsString(addTableNode.Properties[MdlSyntax.Template].Value));
                return;
            } // if

            IAstNodePropertyValue[] templateNames = 
                ((IListAstNodePropertyValue)addTableNode.Properties[MdlSyntax.Templates].Value).Items;
            foreach(IAstNodePropertyValue templateName in templateNames)
                SubstituteTemplate(addTableNode, ((IStringAstNodePropertyValue)templateName).Value);
        }
 /// <summary>
 /// Visits the given <paramref name="addTableNode"/>.
 /// </summary>
 /// <param name="addTableNode"></param>
 public override void Visit(IAddTableNode addTableNode)
 {
     Visit(addTableNode.ChildNodes);
 }
 public override void Visit(IAddTableNode addTableNode)
 {
     textWriter.Write("add table {0}", GetIdentifier(addTableNode.Name));
     
     WriteProperties(addTableNode);
     VisitBlock(addTableNode);
 }
        private void SubstituteTemplate(IAddTableNode addTableNode, string templateName)
        {
            if(!tableTemplateNodes.ContainsKey(templateName))
                return;

            foreach(IAstNode childNode in tableTemplateNodes[templateName].ChildNodes)
            {
                IAstNode astNode = AstUtil.Clone(childNode);
                
                astNode.Parent = addTableNode;
                addTableNode.ChildNodes.Add(astNode);
            } // foreach
        }
        /// <summary>
        /// Visits the given <paramref name="addTableNode"/>.
        /// </summary>
        /// <param name="addTableNode"></param>
        public override void Visit(IAddTableNode addTableNode)
        {
            TableDefinition table = new TableDefinition(addTableNode.Name);
            Environment.Schema.AddTable(table);

            foreach(IAddColumnNode addColumnNode in Filter<IAddColumnNode>(addTableNode.ChildNodes))
            {
                table.AddColumn(BindAddColumn(addColumnNode));
                addColumnNode.Table = table.Name;

                addColumnNode.Accept(this);
            } // foreach

            //
            // Now process all but IAddColumnNode
            foreach(IAstNode astNode in FilterNot<IAddColumnNode>(addTableNode.ChildNodes))
            {
                astNode.Accept(this);
            } // foreach
        }