mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Create core infrastructure for KNNGIST.
This is a heavily revised version of builtin_knngist_core-0.9. The ordering operators are no longer mixed in with actual quals, which would have confused not only humans but significant parts of the planner. Instead, ordering operators are carried separately throughout planning and execution. Since the API for ambeginscan and amrescan functions had to be changed anyway, this commit takes the opportunity to rationalize that a bit. RelationGetIndexScan no longer forces a premature index_rescan call; instead, callers of index_beginscan must call index_rescan too. Aside from making the AM-side initialization logic a bit less peculiar, this has the advantage that we do not make a useless extra am_rescan call when there are runtime key values. AMs formerly could not assume that the key values passed to amrescan were actually valid; now they can. Teodor Sigaev and Tom Lane
This commit is contained in:
@ -60,6 +60,11 @@ typedef uint16 StrategyNumber;
|
||||
* supported only for index scans, not heap scans; and not all index AMs
|
||||
* support them.
|
||||
*
|
||||
* A ScanKey can also represent an ordering operator invocation, that is
|
||||
* an ordering requirement "ORDER BY indexedcol op constant". This looks
|
||||
* the same as a comparison operator, except that the operator doesn't
|
||||
* (usually) yield boolean. We mark such ScanKeys with SK_ORDER_BY.
|
||||
*
|
||||
* Note: in some places, ScanKeys are used as a convenient representation
|
||||
* for the invocation of an access method support procedure. In this case
|
||||
* sk_strategy/sk_subtype are not meaningful, and sk_func may refer to a
|
||||
@ -122,6 +127,7 @@ typedef ScanKeyData *ScanKey;
|
||||
#define SK_SEARCHNULL 0x0020 /* scankey represents "col IS NULL" */
|
||||
#define SK_SEARCHNOTNULL 0x0040 /* scankey represents "col IS NOT
|
||||
* NULL" */
|
||||
#define SK_ORDER_BY 0x0080 /* scankey is for ORDER BY op */
|
||||
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user