protected virtual void VisitRelation(IDropBuilder expression, IRelationBuilder relation, ITableConfig leftTable, ITableConfig rightTable) { 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.DROP); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.CONSTRAINT); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(Conventions.RelationName(leftTable, rightTable))); }
protected virtual void VisitRelation(IDropBuilder expression, IRelationBuilder relation) { switch (relation.Relation.Flags.GetMultiplicity()) { case RelationFlags.OneToOne: case RelationFlags.OneToMany: this.VisitRelation(expression, relation, relation.Relation.LeftTable, relation.Relation.RightTable); break; case RelationFlags.ManyToMany: this.VisitRelation(expression, relation, relation.Relation.LeftTable, relation.Relation.MappingTable); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.BATCH); this.VisitRelation(expression, relation, relation.Relation.RightTable, relation.Relation.MappingTable); break; default: throw new NotImplementedException(); } }
protected override void VisitDrop(IFragmentBuilder parent, IQueryGraphBuilder graph, IDropBuilder expression) { this.Push(new SQLiteDropWriter(parent, graph, this.Database, this, this.Parameters)); this.Peek.Write(expression); this.Pop(); }
protected virtual void VisitIndex(IDropBuilder expression, IIndexBuilder index) { this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.DROP); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.INDEX); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.Identifier(Conventions.IndexName(index.Index))); }
protected virtual void VisitTable(IDropBuilder expression, ITableBuilder table) { this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.DROP); this.Builder.AppendFormat("{0} ", this.Database.QueryFactory.Dialect.TABLE); this.Visit(table); }
protected override void VisitRelation(IDropBuilder expression, IRelationBuilder relation) { //TODO: SQLite cannot ALTER TABLE DROP FOREIGN KEY which makes this kind of thing tricky. }
protected override void VisitDrop(IFragmentBuilder parent, IQueryGraphBuilder graph, IDropBuilder expression) { //Nothing to do. }
protected abstract void VisitDrop(IFragmentBuilder parent, IQueryGraphBuilder graph, IDropBuilder expression);