We are implementing a plugin datasource that pulls in data from a local sqlite database. Some of these datasets can be quite large (100K’s of elements for some layers) and it is possible for there to be quite a few Fields (e.g. a dozen or more).
We have the "IsQueryLanguageSupported" flag on the datasource template set to true, and we leverage the "whereclaue" property on the queryfilter to improve performance on data reads for the higher-volume cases.
Symbology is one of the most demanding/important cases, where data for many/all elements is frequently requested as the display renders. These Query requests tend to come in chunks of about 500 rows; we are extracting the ids (from the IN statement) to populate only the appropriate subset of rows. We’re getting reasonable performance with a few Fields, but degrades when there are more Fields.
Symbology tends to only be applied to 1 or 2 fields, so we’re hoping for a way to optimize display performance by only getting the data that is needed. SubFields looks to be exactly what we want:
If a SubFields clause is specified then only those values for fields listed in the QueryFilter.SubFields should be populated into the returned rows … values not specified in the SubFields clause should be set to null.
However, when a query on the datasource is triggered on rendering symbology set up around a single field, the "Subfields" property on the QueryFilter does not seem to ever provide additional context.
- It seems like SubFields should be populated for the symbology cases. Is that an oversight (or are we missing something/misunderstanding)?
- If SubFields is not something we can take advantage of, do you have other thoughts on ways we can optimize for the Symbology case?