SCreateTable TableDef(long tb, SCreateTable ctb)
        {
            Mustbe(Sym.LPAREN);
            var cols = ctb.coldefs;
            var cons = ctb.constraints;

            for (; ;)
            {
                var cd = ColumnDef(tb);
                cols += (cd.Item2, cols.Length ?? 0); // tb updated with the new column
                if (cd.Item3 != null)                 // tableconstraint?
                {
                    cons = cons.Append(cd.Item3);
                }
                switch (lxr.tok)
                {
                case Sym.RPAREN:
                    Next();
                    return(new SCreateTable(ctb.tdef, cols, cons));

                case Sym.COMMA: Next(); continue;
                }
                throw new Exception("Syntax error");
            }
        }
        SCreateTable CreateTable()
        {
            Next();
            var tb  = MustBeID();
            var ctb = TableDef(tb, new SCreateTable(tb, SList <SColumn> .Empty, SList <SIndex> .Empty));

            while (lxr.tok == Sym.PRIMARY || lxr.tok == Sym.UNIQUE || lxr.tok == Sym.REFERENCES)
            {
                var x = TableConstraint(tb);
                ctb = new SCreateTable(tb, ctb.coldefs, ctb.constraints + x);
                if (lxr.tok == Sym.COMMA)
                {
                    Next();
                }
            }
            return(ctb);
        }