Re: Collecting statistics about contents of JSONB columns
От | Tomas Vondra |
---|---|
Тема | Re: Collecting statistics about contents of JSONB columns |
Дата | |
Msg-id | c618b784-4295-fb9b-d9ba-e0970ca68ca0@enterprisedb.com обсуждение исходный текст |
Ответ на | Re: Collecting statistics about contents of JSONB columns (Zhihong Yu <zyu@yugabyte.com>) |
Список | pgsql-hackers |
On 1/1/22 22:16, Zhihong Yu wrote: > Hi, > > +static JsonPathStats > +jsonStatsFindPathStats(JsonStats jsdata, char *path, int pathlen) > > Stats appears twice in the method name. I think findJsonPathStats() > should suffice. > It should check `if (jsdata->nullfrac >= 1.0)` > as jsonStatsGetPathStatsStr does. > > +JsonPathStats > +jsonStatsGetPathStatsStr(JsonStats jsdata, const char *subpath, int > subpathlen) > > This func can be static, right ? > I think findJsonPathStatsWithPrefix() would be a better name for the func. > > + * XXX Doesn't this need ecape_json too? > + */ > +static void > +jsonPathAppendEntryWithLen(StringInfo path, const char *entry, int len) > +{ > + char *tmpentry = pnstrdup(entry, len); > + jsonPathAppendEntry(path, tmpentry); > > ecape_json() is called within jsonPathAppendEntry(). The XXX comment can > be dropped. > > +jsonPathStatsGetArrayIndexSelectivity(JsonPathStats pstats, int index) > > It seems getJsonSelectivityWithArrayIndex() would be a better name. > Thanks. I'll think about the naming changes. > + sel = scalarineqsel(NULL, operator, > + operator == JsonbGtOperator || > + operator == JsonbGeOperator, > + operator == JsonbLeOperator || > + operator == JsonbGeOperator, > > Looking at the comment for scalarineqsel(): > > * scalarineqsel - Selectivity of "<", "<=", ">", ">=" for scalars. > * > * This is the guts of scalarltsel/scalarlesel/scalargtsel/scalargesel. > * The isgt and iseq flags distinguish which of the four cases apply. > > It seems JsonbLtOperator doesn't appear in the call, can I ask why ? > Because the scalarineqsel signature is this scalarineqsel(PlannerInfo *root, Oid operator, bool isgt, bool iseq, Oid collation, VariableStatData *vardata, Datum constval, Oid consttype) so /* is it greater or greater-or-equal */ isgt = operator == JsonbGtOperator || operator == JsonbGeOperator /* is it equality? */ iseq = operator == JsonbLeOperator || operator == JsonbGeOperator, So I think this is correct. A comment explaining this would be nice. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: