fix prefix/labels in spgist
[gevel.git] / gevel.c
diff --git a/gevel.c b/gevel.c
index b4e66f4..facfa40 100644 (file)
--- a/gevel.c
+++ b/gevel.c
@@ -891,7 +891,9 @@ spgist_stat(PG_FUNCTION_ARGS)
                                leafPages = 0,
                                emptyPages = 0,
                                deletedPages = 0;
-       double    usedSpace = 0.0;
+       double    usedSpace = 0.0,
+                         usedLeafSpace = 0.0,
+                         usedInnerSpace = 0.0;
        char            res[1024];
        int              bufferSize = -1;
        int64      innerTuples = 0,
@@ -968,6 +970,10 @@ spgist_stat(PG_FUNCTION_ARGS)
                pageFree = PageGetExactFreeSpace(page);
 
                usedSpace += bufferSize - pageFree;
+               if (SpGistPageIsLeaf(page))
+                       usedLeafSpace += bufferSize - pageFree;
+               else
+                       usedInnerSpace += bufferSize - pageFree;
 
                if (pageFree == bufferSize)
                        emptyPages++;
@@ -986,6 +992,8 @@ spgist_stat(PG_FUNCTION_ARGS)
                         "leafPages:         %u\n"
                         "emptyPages:        %u\n"
                         "usedSpace:         %.2f kbytes\n"
+                        "usedInnerSpace:    %.2f kbytes\n"
+                        "usedLeafSpace:     %.2f kbytes\n"
                         "freeSpace:         %.2f kbytes\n"
                         "fillRatio:         %.2f%%\n"
                         "leafTuples:        " INT64_FORMAT "\n"
@@ -997,6 +1005,8 @@ spgist_stat(PG_FUNCTION_ARGS)
                         "innerRedirects:    " INT64_FORMAT,
                         totalPages, deletedPages, innerPages, leafPages, emptyPages,
                         usedSpace / 1024.0,
+                        usedInnerSpace / 1024.0,
+                        usedLeafSpace / 1024.0,
                         (((double) bufferSize) * ((double) totalPages) - usedSpace) / 1024,
                         100.0 * (usedSpace / (((double) bufferSize) * ((double) totalPages))),
                         leafTuples, innerTuples, nAllTheSame,
@@ -1200,13 +1210,13 @@ next:
                        *tid = node->t_tid;
                        prst->dvalues[3] = PointerGetDatum(tid);
                        prst->nulls[3] = ' ';
-                       if (prst->state.attPrefixType.attbyval == false && innerTuple->prefixSize > 0) {
+                       if (innerTuple->prefixSize > 0) {
                                prst->dvalues[4]  = datumCopy(SGITDATUM(innerTuple, &prst->state), 
                                                                                        prst->state.attPrefixType.attbyval, prst->state.attPrefixType.attlen); 
                                prst->nulls[4] = ' ';
                        } else
                                prst->nulls[4] = 'n';
-                       if (prst->state.attLabelType.attbyval == false && !IndexTupleHasNulls(node)) {
+                       if (!IndexTupleHasNulls(node)) {
                                prst->dvalues[5]  = datumCopy(SGNTDATUM(node, &prst->state), 
                                                                                        prst->state.attLabelType.attbyval, prst->state.attLabelType.attlen); 
                                prst->nulls[5] = ' ';