From: | Anastasia Lubennikova <a(dot)lubennikova(at)postgrespro(dot)ru> |
---|---|
To: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, Andrey Borodin <amborodin(at)acm(dot)org>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Anastasia Lubennikova <lubennikovaav(at)gmail(dot)com>, Brad DeJong <Brad(dot)Dejong(at)infor(dot)com> |
Subject: | Re: WIP: Covering + unique indexes. |
Date: | 2017-03-01 08:46:59 |
Message-ID: | 7a443dba-deec-8011-617c-2d415c6e7d0d@postgrespro.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
26.02.2017 06:09, Amit Kapila:
> On Thu, Feb 16, 2017 at 6:43 PM, Anastasia Lubennikova
> <a(dot)lubennikova(at)postgrespro(dot)ru> wrote:
>> 14.02.2017 15:46, Amit Kapila:
>>
>>
>>> 4.
>>> + IDENTITY_P IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IMPORT_P IN_P
>>> INCLUDE
>>> INCLUDING INCREMENT INDEX INDEXES INHERIT INHERITS INITIALLY INLINE_P
>>> INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P INTEGER
>>> INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION
>>> @@ -3431,17 +3433,18 @@ ConstraintElem:
>>> n->initially_valid = !n->skip_validation;
>>> $$ = (Node *)n;
>>> }
>>> - | UNIQUE '(' columnList ')' opt_definition OptConsTableSpace
>>> + | UNIQUE '(' columnList ')' opt_c_including opt_definition
>>> OptConsTableSpace
>>>
>>> If we want to use INCLUDE in syntax, then it might be better to keep
>>> the naming reflect the same. For ex. instead of opt_c_including we
>>> should use opt_c_include.
>>>
>> Thank you for this suggestion. I've just wrote the code looking at examples
>> around,
>> but optincluding and optcincluding clauses seem to be redundant.
>> I've cleaned up the code.
>>
> I think you have cleaned only in gram.y as I could see the references
> to 'including' in other parts of code. For ex, see below code:
> @@ -2667,6 +2667,7 @@ _copyConstraint(const Constraint *from)
> COPY_NODE_FIELD(raw_expr);
> COPY_STRING_FIELD(cooked_expr);
> COPY_NODE_FIELD(keys);
> + COPY_NODE_FIELD(including);
> COPY_NODE_FIELD(exclusions);
> COPY_NODE_FIELD(options);
> COPY_STRING_FIELD(indexname);
> @@ -3187,6 +3188,7 @@ _copyIndexStmt(const IndexStmt *from)
> COPY_STRING_FIELD(accessMethod);
> COPY_STRING_FIELD(tableSpace);
> COPY_NODE_FIELD(indexParams);
> + COPY_NODE_FIELD(indexIncludingParams);
>
There is a lot of variables like 'including*' in the patch.
Frankly, I don't see a reason to rename them. It's clear that they
refers to included attributes, whatever we call them "include",
"included" or "including".
> @@ -425,6 +425,13 @@ ConstructTupleDescriptor(Relation heapRelation,
> /*
> + * Code below is concerned to the opclasses which are not used
> + * with the included columns.
> + */
> + if (i >= indexInfo->ii_NumIndexKeyAttrs)
> + continue;
> +
>
> There seems to be code below the above check which is not directly
> related to opclasses, so not sure if you have missed that or is there
> any other reason to ignore that. I am referring to following code in
> the same function after the above check:
> /*
> * If a key type different from the heap value is specified, update
> *
> the type-related fields in the index tupdesc.
> */
> if (OidIsValid(keyType) &&
> keyType != to->atttypid)
>
Good point,
I skip some steps that should be executed for all attributes.
It is harmless though, since for btree (and other access methods, except
hash) amkeytype is always invalid.
But I agree that the code can be clarified.
New patch with minor changes is attached.
--
Anastasia Lubennikova
Postgres Professional:http://www.postgrespro.com
The Russian Postgres Company
Attachment | Content-Type | Size |
---|---|---|
include_columns_10.0_v3.patch | text/x-patch | 142.2 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Ashutosh Bapat | 2017-03-01 08:56:29 | Re: Partition-wise join for join between (declaratively) partitioned tables |
Previous Message | Fabien COELHO | 2017-03-01 08:07:36 | Re: \if, \elseif, \else, \endif (was Re: PSQL commands: \quit_if, \quit_unless) |