RE: [PATCH] Keeps tracking the uniqueness with UniqueKey

Поиск
Список
Период
Сортировка
От Hou, Zhijie
Тема RE: [PATCH] Keeps tracking the uniqueness with UniqueKey
Дата
Msg-id 40daf28001bf4d5785da82f9ef27909f@G08CNEXMBPEKD05.g08.fujitsu.local
обсуждение исходный текст
Ответ на Re: [PATCH] Keeps tracking the uniqueness with UniqueKey  (Heikki Linnakangas <hlinnaka@iki.fi>)
Список pgsql-hackers
Hi 

I look into the patch again and have some comments.

1.
+    Size oid_cmp_len = sizeof(Oid) * ind1->ncolumns;
+
+    return ind1->ncolumns == ind2->ncolumns &&
+        ind1->unique == ind2->unique &&
+        memcmp(ind1->indexkeys, ind2->indexkeys, sizeof(int) * ind1->ncolumns) == 0 &&
+        memcmp(ind1->opfamily, ind2->opfamily, oid_cmp_len) == 0 &&
+        memcmp(ind1->opcintype, ind2->opcintype, oid_cmp_len) == 0 &&
+        memcmp(ind1->sortopfamily, ind2->sortopfamily, oid_cmp_len) == 0 &&
+        equal(get_tlist_exprs(ind1->indextlist, true),
+              get_tlist_exprs(ind2->indextlist, true));

The length of sortopfamily,opfamily and opcintype seems ->nkeycolumns not ->ncolumns.
I checked function get_relation_info where init the IndexOptInfo.
(If there are more places where can change the length, please correct me)


2.

+    COPY_SCALAR_FIELD(ncolumns);
+    COPY_SCALAR_FIELD(nkeycolumns);
+    COPY_SCALAR_FIELD(unique);
+    COPY_SCALAR_FIELD(immediate);
+    /* We just need to know if it is NIL or not */
+    COPY_SCALAR_FIELD(indpred);
+    COPY_SCALAR_FIELD(predOK);
+    COPY_POINTER_FIELD(indexkeys, from->ncolumns * sizeof(int));
+    COPY_POINTER_FIELD(indexcollations, from->ncolumns * sizeof(Oid));
+    COPY_POINTER_FIELD(opfamily, from->ncolumns * sizeof(Oid));
+    COPY_POINTER_FIELD(opcintype, from->ncolumns * sizeof(Oid));
+    COPY_POINTER_FIELD(sortopfamily, from->ncolumns * sizeof(Oid));
+    COPY_NODE_FIELD(indextlist);

The same as 1.
Should use nkeycolumns if I am right.


3.
+    foreach(lc, newnode->indextlist)
+    {
+        TargetEntry *tle = lfirst_node(TargetEntry, lc);
+        /* Index on expression is ignored */
+        Assert(IsA(tle->expr, Var));
+        tle->expr = (Expr *) find_parent_var(appinfo, (Var *) tle->expr);
+        newnode->indexkeys[idx] = castNode(Var, tle->expr)->varattno;
+        idx++;
+    }

The count variable 'idx'  can be replaces by foreach_current_index().


Best regards,
houzj




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: proposal: unescape_text function
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: TAP test utility module 'PG_LSN.pm'