Пример #1
0
Datum
gmol_compress(PG_FUNCTION_ARGS)
{
  GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  GISTENTRY *retval = entry;

  if (entry->leafkey) {
    CROMol m = constructROMol(DatumGetMolP(entry->key));

    retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));

    gistentryinit(*retval, PointerGetDatum(makeMolSignature(m)),
                  entry->rel, entry->page,
                  entry->offset, false);
    freeCROMol(m);
  }       
  else if ( !ISALLTRUE(DatumGetPointer(entry->key)) ) {
    retval = compressAllTrue(entry);
  }
  
  PG_RETURN_POINTER(retval);
}
Пример #2
0
Datum
gsfp_compress(PG_FUNCTION_ARGS)
{
  GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  GISTENTRY *retval = entry;

  if (entry->leafkey) {
    CSfp fp = constructCSfp(DatumGetSfpP(entry->key));

    retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));

    gistentryinit(*retval, PointerGetDatum(makeSfpSignature(fp, NUMBITS)),
                  entry->rel, entry->page,
                  entry->offset, false);
    freeCSfp(fp);
  }       
  else if ( !ISALLTRUE(DatumGetPointer(entry->key)) ) {
    retval = compressAllTrue(entry);
  }
                
  PG_RETURN_POINTER(retval);
}
Пример #3
0
Datum
greaction_compress(PG_FUNCTION_ARGS)
{
  GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  GISTENTRY *retval = entry;

  if (entry->leafkey) {
    CChemicalReaction rxn = constructChemReact(DatumGetMolP(entry->key));

    retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
    
    gistentryinit(*retval, PointerGetDatum(makeReactionSign(rxn)),
                  entry->rel, entry->page,
                  entry->offset, false);
    freeChemReaction(rxn);
  }
  else if ( !ISALLTRUE(DatumGetPointer(entry->key)) ) {
    retval = compressAllTrue(entry);
  }

  PG_RETURN_POINTER(retval);
}
Пример #4
0
Datum
gsfp_compress(PG_FUNCTION_ARGS)
{
  GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
  GISTENTRY  *retval = entry;

  if (entry->leafkey) {
    MolSparseFingerPrint fp = constructMolSparseFingerPrint(DatumGetSparseFingerPrintP(entry->key));

    retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));

    gistentryinit(*retval, PointerGetDatum(makeSignatureSparseFingerPrint(fp, NUMBITS)),
                  entry->rel, entry->page,
                  entry->offset, FALSE);
    freeMolSparseFingerPrint(fp);
  }       
  else if ( !ISALLTRUE(DatumGetPointer(entry->key)) )
    {
      retval = compressAllTrue(entry);
    }
                
  PG_RETURN_POINTER(retval);
}