Пример #1
0
 protected virtual void VisitIndex(ICreateBuilder expression, IIndexBuilder index)
 {
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CREATE);
     if (index.Index.Flags.HasFlag(IndexFlags.Unique))
     {
         this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.UNIQUE);
     }
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.INDEX);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(Conventions.IndexName(index.Index)));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.ON);
     this.Visit(index.Table);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.OPEN_PARENTHESES);
     this.Visit(index.Columns);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CLOSE_PARENTHESES);
     if (index.Index.Expression != null && !index.Index.Expression.IsEmpty())
     {
         this.Visitor.Visit(
             this,
             this.Graph,
             this.Fragment <IFilterBuilder>().With(
                 filter => filter.Expressions.Add(index.Index.Expression)
                 )
             );
     }
 }
Пример #2
0
 protected virtual void VisitTable(ICreateBuilder expression, ITableBuilder table, IEnumerable <IColumnBuilder> columns)
 {
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CREATE);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.TABLE);
     this.Visit(table);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.OPEN_PARENTHESES);
     this.Visit(columns);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CLOSE_PARENTHESES);
 }
Пример #3
0
 protected override void VisitIndex(ICreateBuilder expression, IIndexBuilder index)
 {
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CREATE);
     if (index.Index.Flags.HasFlag(IndexFlags.Unique))
     {
         this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.UNIQUE);
     }
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.INDEX);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(Conventions.IndexName(index.Index)));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.ON);
     this.Visit(index.Table);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.OPEN_PARENTHESES);
     this.Visit(index.Columns);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CLOSE_PARENTHESES);
 }
Пример #4
0
 protected virtual void VisitRelation(ICreateBuilder expression, IRelationBuilder relation, ITableConfig leftTable, ITableConfig rightTable, IColumnConfig leftColumn, IColumnConfig rightColumn)
 {
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.ALTER);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.TABLE);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(rightTable.TableName));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.ADD);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CONSTRAINT);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(Conventions.RelationName(leftTable, rightTable)));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.FOREIGN_KEY);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.OPEN_PARENTHESES);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(rightColumn.ColumnName));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CLOSE_PARENTHESES);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.REFERENCES);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(leftTable.TableName));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.OPEN_PARENTHESES);
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(leftColumn.ColumnName));
     this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CLOSE_PARENTHESES);
 }
Пример #5
0
        protected virtual void VisitRelation(ICreateBuilder expression, IRelationBuilder relation)
        {
            var map = relation.Relation.Expression.GetColumnMap();

            switch (relation.Relation.Flags.GetMultiplicity())
            {
            case RelationFlags.OneToOne:
            case RelationFlags.OneToMany:
            {
                var leftColumn  = map[relation.Relation.LeftTable].SingleOrDefault();
                var rightColumn = map[relation.Relation.RightTable].SingleOrDefault();
                this.VisitRelation(expression, relation, relation.Relation.LeftTable, relation.Relation.RightTable, leftColumn, rightColumn);
            }
            break;

            case RelationFlags.ManyToMany:
            {
                var leftColumn  = map[relation.Relation.LeftTable].SingleOrDefault();
                var rightColumn = relation.Relation.Expression.GetOppositeExpression <IColumnBuilder, IColumnBuilder>(
                    column => object.ReferenceEquals(column.Column, leftColumn)
                    ).Column;
                this.VisitRelation(expression, relation, relation.Relation.LeftTable, relation.Relation.MappingTable, leftColumn, rightColumn);
            }
                this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.BATCH);
                {
                    var leftColumn  = map[relation.Relation.RightTable].SingleOrDefault();
                    var rightColumn = relation.Relation.Expression.GetOppositeExpression <IColumnBuilder, IColumnBuilder>(
                        column => object.ReferenceEquals(column.Column, leftColumn)
                        ).Column;
                    this.VisitRelation(expression, relation, relation.Relation.RightTable, relation.Relation.MappingTable, leftColumn, rightColumn);
                }
                break;

            default:
                throw new NotImplementedException();
            }
        }
Пример #6
0
 protected override void VisitCreate(IFragmentBuilder parent, IQueryGraphBuilder graph, ICreateBuilder expression)
 {
     this.Push(new SQLiteCreateWriter(parent, graph, this.Database, this, this.Parameters));
     this.Peek.Write(expression);
     this.Pop();
 }
Пример #7
0
 protected override void VisitRelation(ICreateBuilder expression, IRelationBuilder relation)
 {
     //TODO: SQLite cannot ALTER TABLE ADD FOREIGN KEY which makes this kind of thing tricky.
 }
Пример #8
0
 protected override void VisitCreate(IFragmentBuilder parent, IQueryGraphBuilder graph, ICreateBuilder expression)
 {
     //Nothing to do.
 }
Пример #9
0
 protected abstract void VisitCreate(IFragmentBuilder parent, IQueryGraphBuilder graph, ICreateBuilder expression);