示例#1
0
        public StringBuilder Visit(IndexClauseNode indexClause)
        {
            var sb = new StringBuilder();

            AppendConstraint(indexClause, sb);
            switch (indexClause.IndexUniqueness)
            {
            case PrimaryKeyOrUnique.PrimaryKey:
                sb.Append("PRIMARY KEY");
                break;

            case PrimaryKeyOrUnique.Unique:
                sb.Append("UNIQUE");
                break;
            }


            if (indexClause.IndexColumns != null)
            {
                sb.Append("(");
                sb.Append(string.Join(", ", indexClause.IndexColumns.Select(i => i.Accept(this))));
                sb.Append(") ");
            }
            if (indexClause.ConflictClauseNode != null)
            {
                sb.Append(" ");
                sb.Append(indexClause.ConflictClauseNode.Accept(this));
            }

            return(sb);
        }
示例#2
0
        public override SQLiteParseTreeNode VisitTable_constraint__index_clause(SQLiteParserSimpleParser.Table_constraint__index_clauseContext context)
        {
            var ret = new IndexClauseNode(context);

            if (context.PRIMARY() != null)
            {
                ret.IndexUniqueness = PrimaryKeyOrUnique.PrimaryKey;
            }
            else if (context.UNIQUE() != null)
            {
                ret.IndexUniqueness = PrimaryKeyOrUnique.Unique;
            }

            ret.IndexColumns =
                context.table_constraint__indexed_columns()
                .table_constraint__indexed_column()
                .Select(i => i.Accept(this))
                .Cast <IndexedColumnNode>()
                .ToList();
            ret.ConflictClauseNode = context.conflict_clause().Accept(this) as ConflictClauseNode;

            return(ret);
        }