834194a10ad846f3fd0bb2bc1eea5b0b5c029cd7 angie Wed Nov 18 23:38:39 2015 -0800 Interface change: removing setAutoSqlObject method from streamer and exposing annoGratorSetAutoSqlObject because asObj should never be externally imposed, but a streamer/grator may have a need to bootstrap itself without an asObj and then install one. refs #15544 diff --git src/lib/annoStreamer.c src/lib/annoStreamer.c index b037c64..d204917 100644 --- src/lib/annoStreamer.c +++ src/lib/annoStreamer.c @@ -65,44 +65,45 @@ void annoStreamerSetFilters(struct annoStreamer *self, struct annoFilter *newFilters) /* Replace any existing filters with newFilters. It is up to calling code to * free old filters and allocate newFilters. */ { self->filters = newFilters; } void annoStreamerAddFilters(struct annoStreamer *self, struct annoFilter *newFilters) /* Add newFilter(s). It is up to calling code to allocate newFilters. */ { self->filters = slCat(newFilters, self->filters); } void annoStreamerInit(struct annoStreamer *self, struct annoAssembly *assembly, struct asObject *asObj, char *name) -/* Initialize a newly allocated annoStreamer with default annoStreamer methods and - * default filters and columns based on asObj. +/* Initialize a newly allocated annoStreamer with default annoStreamer methods. + * If asObj is NULL, then the caller must call annoStreamerSetAutoSqlObject before + * configuring filters. * In general, subclasses' constructors will call this first; override nextRow, close, * and probably setRegion; and then initialize their private data. */ { self->assembly = assembly; self->getAutoSqlObject = annoStreamerGetAutoSqlObject; -self->setAutoSqlObject = annoStreamerSetAutoSqlObject; self->setRegion = annoStreamerSetRegion; self->getHeader = annoStreamerGetHeader; self->setFilters = annoStreamerSetFilters; self->addFilters = annoStreamerAddFilters; self->positionIsGenome = TRUE; -self->setAutoSqlObject(self, asObj); +if (asObj != NULL) + annoStreamerSetAutoSqlObject(self, asObj); if (name == NULL) errAbort("annoStreamerInit: need non-NULL name"); self->name = cloneString(name); } void annoStreamerFree(struct annoStreamer **pSelf) /* Free self. This should be called at the end of subclass close methods, after * subclass-specific connections are closed and resources are freed. */ { if (pSelf == NULL) return; struct annoStreamer *self = *pSelf; freez(&(self->name)); freez(&(self->chrom)); freez(pSelf);