public void TestWithFKConstraint()
        {
            var expected = new CreateTableNode
            {
                TableName         = "c15",
                ColumnDefinitions = new[]
                {
                    new ColumnDefNode
                    {
                        ColumnName = "x",
                    },
                    new ColumnDefNode
                    {
                        ColumnName = "y",
                    }
                },
                TableConstraints = new TableConstraintNode[]
                {
                    new TableConstraintForeignKeyNode
                    {
                        FieldNames = new List <string>()
                        {
                            "x", "y"
                        },
                        ForeignKeyClauseNode = new ForeignKeyClauseNode()
                        {
                            TableName = "p5",
                            FieldList = new List <string>()
                            {
                                "b", "c"
                            }
                        }
                    }
                },
            }.ToExpectedObject().AddTreeNode();

            var parser = RunParser("CREATE TABLE c15 (x, y, FOREIGN KEY(x,y) REFERENCES p5(b,c));");

            expected.ShouldMatch(parser);
        }
        public void TestWithTableConstraintsTree()
        {
            var expected = new CreateTableNode
            {
                TableName         = "PROJECTS",
                ColumnDefinitions = new[]
                {
                    new ColumnDefNode
                    {
                        ColumnName   = "CLASSID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "SEQNO",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "LASTMODONNODEID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    }
                    ,
                    new ColumnDefNode
                    {
                        ColumnName   = "PREVMODONNODEID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "ISSUEID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "OBJECTID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "REVISIONNUM",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "CONTAINERID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "AUTHORID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "CREATIONDATE",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "25" }
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "LASTMODIFIEDDATE",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "25" }
                        },
                        ColumnConstraints = new ColumnConstraintNode[]
                        {
                            new UniqueConstraintNode(),
                            new DefaultConstraintNode()
                            {
                                Value = "NULL"
                            }
                        }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "UPDATENUMBER",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "PREVREVISIONNUM",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "LASTCMD",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "LASTCMDACLVERSION",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "int"
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "USERDEFINEDFIELD",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "300" }
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode {
                                                        Value = "NULL"
                                                    } }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "LASTMODIFIEDBYID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "50" }
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },

                    new ColumnDefNode
                    {
                        ColumnName   = "NAME",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "100" }
                        },
                        ColumnConstraints = new[] { new NotNullConstraintNode() }
                    },
                    new ColumnDefNode
                    {
                        ColumnName   = "ID",
                        TypeNameNode = new TypeNameNode {
                            TypeName = "text", SignedNumbers = new[] { "100" }
                        },
                        ColumnConstraints = new[] { new DefaultConstraintNode()
                                                    {
                                                        Value = "NULL"
                                                    } }
                    },
                },
                TableConstraints = new[]
                {
                    new IndexClauseNode
                    {
                        ConstraintName = "PK_PROJECTS",
                        IndexColumns   = new[]
                        {
                            new IndexedColumnNode {
                                Id = "ISSUEID"
                            },
                            new IndexedColumnNode {
                                Id = "OBJECTID"
                            }
                        }
                    }
                }
            }.ToExpectedObject().AddTreeNode();

            var parser = RunParser(
                "CREATE TABLE PROJECTS(CLASSID int null, SEQNO int not null, LASTMODONNODEID text(50) not null, PREVMODONNODEID text(50) null, ISSUEID text(50) not null, OBJECTID text(50) not null, REVISIONNUM int not null, CONTAINERID text(50) not null, AUTHORID text(50) not null, CREATIONDATE text(25) null, LASTMODIFIEDDATE text(25) UNIQUE null, UPDATENUMBER int null, PREVREVISIONNUM int null, LASTCMD int null, LASTCMDACLVERSION int null, USERDEFINEDFIELD text(300) null, LASTMODIFIEDBYID text(50) null, NAME text(100) not null, ID text(100) null, constraint PK_PROJECTS primary key (ISSUEID, OBJECTID))");

            expected.ShouldMatch(parser);
        }