26
26
initGinState(GinState *state, Relation index)
30
30
state->origTupdesc = index->rd_att;
32
32
state->oneCol = (index->rd_att->natts == 1) ? true : false;
34
for(i=0;i<index->rd_att->natts;i++)
34
for (i = 0; i < index->rd_att->natts; i++)
36
state->tupdesc[i] = CreateTemplateTupleDesc(2,false);
36
state->tupdesc[i] = CreateTemplateTupleDesc(2, false);
38
TupleDescInitEntry( state->tupdesc[i], (AttrNumber) 1, NULL,
40
TupleDescInitEntry( state->tupdesc[i], (AttrNumber) 2, NULL,
41
index->rd_att->attrs[i]->atttypid,
42
index->rd_att->attrs[i]->atttypmod,
43
index->rd_att->attrs[i]->attndims
38
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 1, NULL,
40
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 2, NULL,
41
index->rd_att->attrs[i]->atttypid,
42
index->rd_att->attrs[i]->atttypmod,
43
index->rd_att->attrs[i]->attndims
46
46
fmgr_info_copy(&(state->compareFn[i]),
47
index_getprocinfo(index, i+1, GIN_COMPARE_PROC),
48
CurrentMemoryContext);
47
index_getprocinfo(index, i + 1, GIN_COMPARE_PROC),
48
CurrentMemoryContext);
49
49
fmgr_info_copy(&(state->extractValueFn[i]),
50
index_getprocinfo(index, i+1, GIN_EXTRACTVALUE_PROC),
51
CurrentMemoryContext);
50
index_getprocinfo(index, i + 1, GIN_EXTRACTVALUE_PROC),
51
CurrentMemoryContext);
52
52
fmgr_info_copy(&(state->extractQueryFn[i]),
53
index_getprocinfo(index, i+1, GIN_EXTRACTQUERY_PROC),
54
CurrentMemoryContext);
53
index_getprocinfo(index, i + 1, GIN_EXTRACTQUERY_PROC),
54
CurrentMemoryContext);
55
55
fmgr_info_copy(&(state->consistentFn[i]),
56
index_getprocinfo(index, i+1, GIN_CONSISTENT_PROC),
57
CurrentMemoryContext);
56
index_getprocinfo(index, i + 1, GIN_CONSISTENT_PROC),
57
CurrentMemoryContext);
60
60
* Check opclass capability to do partial match.
62
if ( index_getprocid(index, i+1, GIN_COMPARE_PARTIAL_PROC) != InvalidOid )
62
if (index_getprocid(index, i + 1, GIN_COMPARE_PARTIAL_PROC) != InvalidOid)
64
64
fmgr_info_copy(&(state->comparePartialFn[i]),
65
index_getprocinfo(index, i+1, GIN_COMPARE_PARTIAL_PROC),
65
index_getprocinfo(index, i + 1, GIN_COMPARE_PARTIAL_PROC),
66
66
CurrentMemoryContext);
68
68
state->canPartialMatch[i] = true;
83
83
OffsetNumber colN = FirstOffsetNumber;
85
if ( !ginstate->oneCol )
85
if (!ginstate->oneCol)
91
* First attribute is always int16, so we can safely use any
92
* tuple descriptor to obtain first attribute of tuple
91
* First attribute is always int16, so we can safely use any tuple
92
* descriptor to obtain first attribute of tuple
94
94
res = index_getattr(tuple, FirstOffsetNumber, ginstate->tupdesc[0],
98
98
colN = DatumGetUInt16(res);
99
Assert( colN >= FirstOffsetNumber && colN <= ginstate->origTupdesc->natts );
99
Assert(colN >= FirstOffsetNumber && colN <= ginstate->origTupdesc->natts);
244
244
compareAttEntries(GinState *ginstate, OffsetNumber attnum_a, Datum a,
245
OffsetNumber attnum_b, Datum b)
245
OffsetNumber attnum_b, Datum b)
247
if ( attnum_a == attnum_b )
248
return compareEntries( ginstate, attnum_a, a, b);
247
if (attnum_a == attnum_b)
248
return compareEntries(ginstate, attnum_a, a, b);
250
return ( attnum_a < attnum_b ) ? -1 : 1;
250
return (attnum_a < attnum_b) ? -1 : 1;