projects
/
smlar.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix markup
[smlar.git]
/
smlar.c
diff --git
a/smlar.c
b/smlar.c
index
7b34c6e
..
5cbe5c2
100644
(file)
--- a/
smlar.c
+++ b/
smlar.c
@@
-22,8
+22,14
@@
PG_MODULE_MAGIC;
PG_MODULE_MAGIC;
+#if (PG_VERSION_NUM >= 90400)
+#define SNAPSHOT NULL
+#else
+#define SNAPSHOT SnapshotNow
+#endif
+
static Oid
static Oid
-getDefaultOpclass(Oid amoid, Oid typid)
+getDefaultOpclass(Oid amoid, Oid typid)
{
ScanKeyData skey;
SysScanDesc scan;
{
ScanKeyData skey;
SysScanDesc scan;
@@
-31,16
+37,16
@@
getDefaultOpclass(Oid amoid, Oid typid)
Relation heapRel;
Oid opclassOid = InvalidOid;
Relation heapRel;
Oid opclassOid = InvalidOid;
- heapRel = heap_open(OperatorClassRelationId, AccessShareLock);
+ heapRel = heap_open(OperatorClassRelationId, AccessShareLock);
ScanKeyInit(&skey,
Anum_pg_opclass_opcmethod,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(amoid));
ScanKeyInit(&skey,
Anum_pg_opclass_opcmethod,
BTEqualStrategyNumber, F_OIDEQ,
ObjectIdGetDatum(amoid));
- scan = systable_beginscan(heapRel,
- OpclassAmNameNspIndexId, true,
- S
napshotNow
, 1, &skey);
+ scan = systable_beginscan(heapRel,
+ OpclassAmNameNspIndexId, true,
+ S
NAPSHOT
, 1, &skey);
while (HeapTupleIsValid((tuple = systable_getnext(scan))))
{
while (HeapTupleIsValid((tuple = systable_getnext(scan))))
{
@@
-61,7
+67,7
@@
getDefaultOpclass(Oid amoid, Oid typid)
}
static Oid
}
static Oid
-getAMProc(Oid amoid, Oid typid)
+getAMProc(Oid amoid, Oid typid)
{
Oid opclassOid = getDefaultOpclass(amoid, typid);
Oid procOid = InvalidOid;
{
Oid opclassOid = getDefaultOpclass(amoid, typid);
Oid procOid = InvalidOid;
@@
-91,7
+97,7
@@
getAMProc(Oid amoid, Oid typid)
for (i = 0; i < catlist->n_members; i++)
{
for (i = 0; i < catlist->n_members; i++)
{
- HeapTuple tuple = &catlist->members[i]->tuple;
+ HeapTuple
tuple = &catlist->members[i]->tuple;
Form_pg_cast castForm = (Form_pg_cast)GETSTRUCT(tuple);
if ( castForm->castfunc == InvalidOid && castForm->castcontext == COERCION_CODE_IMPLICIT )
Form_pg_cast castForm = (Form_pg_cast)GETSTRUCT(tuple);
if ( castForm->castfunc == InvalidOid && castForm->castcontext == COERCION_CODE_IMPLICIT )
@@
-105,7
+111,7
@@
getAMProc(Oid amoid, Oid typid)
ReleaseSysCacheList(catlist);
}
ReleaseSysCacheList(catlist);
}
-
+
if ( !OidIsValid(opclassOid) )
return InvalidOid;
if ( !OidIsValid(opclassOid) )
return InvalidOid;
@@
-132,7
+138,7
@@
getAMProc(Oid amoid, Oid typid)
#endif
scan = systable_beginscan(heapRel, AccessMethodProcedureIndexId, true,
#endif
scan = systable_beginscan(heapRel, AccessMethodProcedureIndexId, true,
- S
napshotNow,
+ S
NAPSHOT,
#if PG_VERSION_NUM >= 90200
4,
#else
#if PG_VERSION_NUM >= 90200
4,
#else
@@
-197,8
+203,8
@@
fillProcs(Oid typid)
info->cmpFuncOid = getAMProc(BTREE_AM_OID, info->tupDesc->attrs[0]->atttypid);
info->hashFuncOid = getAMProc(HASH_AM_OID, info->tupDesc->attrs[0]->atttypid);
info->cmpFuncOid = getAMProc(BTREE_AM_OID, info->tupDesc->attrs[0]->atttypid);
info->hashFuncOid = getAMProc(HASH_AM_OID, info->tupDesc->attrs[0]->atttypid);
- }
- else
+ }
+ else
{
info->tupDesc = NULL;
{
info->tupDesc = NULL;
@@
-248,7
+254,7
@@
cmpProcTypeInfo(const void *a, const void *b)
Assert( av->typid != bv->typid );
Assert( av->typid != bv->typid );
- return ( av->typid > bv->typid ) ? 1 : -1;
+ return ( av->typid > bv->typid ) ? 1 : -1;
}
ProcTypeInfo
}
ProcTypeInfo
@@
-258,7
+264,7
@@
findProcs(Oid typid)
if ( nCacheProcs == 1 )
{
if ( nCacheProcs == 1 )
{
- if ( cacheProcs[0]->typid == typid )
+ if ( cacheProcs[0]->typid == typid )
{
/*cacheProcs[0]->hashFuncInited = cacheProcs[0]->cmpFuncInited = false;*/
return cacheProcs[0];
{
/*cacheProcs[0]->hashFuncInited = cacheProcs[0]->cmpFuncInited = false;*/
return cacheProcs[0];
@@
-267,7
+273,7
@@
findProcs(Oid typid)
else if ( nCacheProcs > 1 )
{
ProcTypeInfo *StopMiddle;
else if ( nCacheProcs > 1 )
{
ProcTypeInfo *StopMiddle;
- ProcTypeInfo *StopLow = cacheProcs,
+ ProcTypeInfo *StopLow = cacheProcs,
*StopHigh = cacheProcs + nCacheProcs;
while (StopLow < StopHigh) {
*StopHigh = cacheProcs + nCacheProcs;
while (StopLow < StopHigh) {
@@
-289,7
+295,7
@@
findProcs(Oid typid)
}
info = fillProcs(typid);
}
info = fillProcs(typid);
- if ( nCacheProcs == 0 )
+ if ( nCacheProcs == 0 )
{
cacheProcs = malloc(sizeof(ProcTypeInfo));
{
cacheProcs = malloc(sizeof(ProcTypeInfo));
@@
-373,11
+379,11
@@
cmpArrayElem(const void *a, const void *b, void *arg)
{
ProcTypeInfo info = (ProcTypeInfo)arg;
{
ProcTypeInfo info = (ProcTypeInfo)arg;
- if (info->tupDesc)
+ if (info->tupDesc)
/* composite type */
return DatumGetInt32( FCall2( &info->cmpFunc,
/* composite type */
return DatumGetInt32( FCall2( &info->cmpFunc,
-
deconstructCompositeType(info, *(Datum*)a, NULL),
-
deconstructCompositeType(info, *(Datum*)b, NULL) ) );
+ deconstructCompositeType(info, *(Datum*)a, NULL),
+ deconstructCompositeType(info, *(Datum*)b, NULL) ) );
return DatumGetInt32( FCall2( &info->cmpFunc,
*(Datum*)a, *(Datum*)b ) );
return DatumGetInt32( FCall2( &info->cmpFunc,
*(Datum*)a, *(Datum*)b ) );
@@
-407,13
+413,13
@@
typedef struct cmpArrayElemData {
static int
cmpArrayElemArg(const void *a, const void *b, void *arg)
{
static int
cmpArrayElemArg(const void *a, const void *b, void *arg)
{
-
cmpArrayElemData
*data = (cmpArrayElemData*)arg;
- int res;
+
cmpArrayElemData
*data = (cmpArrayElemData*)arg;
+ int
res;
if (data->info->tupDesc)
res = DatumGetInt32( FCall2( &data->info->cmpFunc,
if (data->info->tupDesc)
res = DatumGetInt32( FCall2( &data->info->cmpFunc,
-
deconstructCompositeType(data->info, *(Datum*)a, NULL),
-
deconstructCompositeType(data->info, *(Datum*)b, NULL) ) );
+ deconstructCompositeType(data->info, *(Datum*)a, NULL),
+ deconstructCompositeType(data->info, *(Datum*)b, NULL) ) );
else
res = DatumGetInt32( FCall2( &data->info->cmpFunc,
*(Datum*)a, *(Datum*)b ) );
else
res = DatumGetInt32( FCall2( &data->info->cmpFunc,
*(Datum*)a, *(Datum*)b ) );
@@
-448,7
+454,7
@@
Array2SimpleArrayU(ProcTypeInfo info, ArrayType *a, void *cache)
if ( s->nelems > 1 )
{
cmpArrayElemData data;
if ( s->nelems > 1 )
{
cmpArrayElemData data;
- int i;
+ int
i;
getFmgrInfoCmp(s->info);
data.info = s->info;
getFmgrInfoCmp(s->info);
data.info = s->info;
@@
-506,13
+512,13
@@
Array2SimpleArrayU(ProcTypeInfo info, ArrayType *a, void *cache)
break;
default:
elog(ERROR,"Unknown TF method: %d", tfm);
break;
default:
elog(ERROR,"Unknown TF method: %d", tfm);
- }
+ }
}
else
{
s->df[i] = 0.0; /* unknown word */
}
}
else
{
s->df[i] = 0.0; /* unknown word */
}
- }
+ }
}
}
else if ( cache )
}
}
else if ( cache )
@@
-527,7
+533,7
@@
Array2SimpleArrayU(ProcTypeInfo info, ArrayType *a, void *cache)
}
}
}
}
}
}
- else if (s->nelems > 0 && cache)
+ else if (s->nelems > 0 && cache)
{
stat = fingArrayStat(cache, s->info->typid, s->elems[0], stat);
if ( stat )
{
stat = fingArrayStat(cache, s->info->typid, s->elems[0], stat);
if ( stat )
@@
-640,12
+646,12
@@
arraysml(PG_FUNCTION_ARGS)
{
ArrayType *a, *b;
SimpleArray *sa, *sb;
{
ArrayType *a, *b;
SimpleArray *sa, *sb;
-
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
@@
-658,10
+664,10
@@
arraysml(PG_FUNCTION_ARGS)
switch(getSmlType())
{
switch(getSmlType())
{
- case
ST_TFIDF:
+ case ST_TFIDF:
PG_RETURN_FLOAT4( TFIDFSml(sa, sb) );
break;
PG_RETURN_FLOAT4( TFIDFSml(sa, sb) );
break;
- case
ST_COSINE:
+ case ST_COSINE:
{
int cnt;
double power;
{
int cnt;
double power;
@@
-672,7
+678,7
@@
arraysml(PG_FUNCTION_ARGS)
PG_RETURN_FLOAT4( ((double)cnt) / sqrt( power ) );
}
break;
PG_RETURN_FLOAT4( ((double)cnt) / sqrt( power ) );
}
break;
- case
ST_OVERLAP:
+ case ST_OVERLAP:
{
float4 res = (float4)numOfIntersect(sa, sb);
{
float4 res = (float4)numOfIntersect(sa, sb);
@@
-683,7
+689,7
@@
arraysml(PG_FUNCTION_ARGS)
elog(ERROR,"Unsupported formula type of similarity");
}
elog(ERROR,"Unsupported formula type of similarity");
}
- PG_RETURN_FLOAT4(0.0); /* keep compiler quiet */
+ PG_RETURN_FLOAT4(0.0); /* keep compiler quiet */
}
PG_FUNCTION_INFO_V1(arraysmlw);
}
PG_FUNCTION_INFO_V1(arraysmlw);
@@
-694,20
+700,19
@@
arraysmlw(PG_FUNCTION_ARGS)
ArrayType *a, *b;
SimpleArray *sa, *sb;
bool useIntersect = PG_GETARG_BOOL(2);
ArrayType *a, *b;
SimpleArray *sa, *sb;
bool useIntersect = PG_GETARG_BOOL(2);
- double numerator = 0.0;
- double denominatorA = 0.0,
+ double numerator = 0.0;
+ double denominatorA = 0.0,
denominatorB = 0.0,
tmpA, tmpB;
int cmp;
ProcTypeInfo info;
int ai = 0, bi = 0;
denominatorB = 0.0,
tmpA, tmpB;
int cmp;
ProcTypeInfo info;
int ai = 0, bi = 0;
-
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
@@
-776,12
+781,12
@@
arraysml_op(PG_FUNCTION_ARGS)
ArrayType *a, *b;
SimpleArray *sa, *sb;
double power = 0.0;
ArrayType *a, *b;
SimpleArray *sa, *sb;
double power = 0.0;
-
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
@@
-794,10
+799,10
@@
arraysml_op(PG_FUNCTION_ARGS)
switch(getSmlType())
{
switch(getSmlType())
{
- case
ST_TFIDF:
+ case ST_TFIDF:
power = TFIDFSml(sa, sb);
break;
power = TFIDFSml(sa, sb);
break;
- case
ST_COSINE:
+ case ST_COSINE:
{
int cnt;
{
int cnt;
@@
-810,7
+815,7
@@
arraysml_op(PG_FUNCTION_ARGS)
power = ((double)cnt) / power;
}
break;
power = ((double)cnt) / power;
}
break;
- case
ST_OVERLAP:
+ case ST_OVERLAP:
power = (double)numOfIntersect(sa, sb);
break;
default:
power = (double)numOfIntersect(sa, sb);
break;
default:
@@
-839,13
+844,13
@@
arraysml_func(PG_FUNCTION_ARGS)
bool isnull;
void *plan;
int stat;
bool isnull;
void *plan;
int stat;
- text *formula = PG_GETARG_TEXT_P(2);
-
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ text *formula = PG_GETARG_TEXT_P(2);
+
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(1), &b, &sb, NULL);
@@
-863,7
+868,6
@@
arraysml_func(PG_FUNCTION_ARGS)
SPI_connect();
SPI_connect();
-
if ( cachedPlan == NULL || cachedLen != VARSIZE(formula) - VARHDRSZ ||
memcmp( cachedFormula, VARDATA(formula), VARSIZE(formula) - VARHDRSZ ) != 0 )
{
if ( cachedPlan == NULL || cachedLen != VARSIZE(formula) - VARHDRSZ ||
memcmp( cachedFormula, VARDATA(formula), VARSIZE(formula) - VARHDRSZ ) != 0 )
{
@@
-892,7
+896,7
@@
arraysml_func(PG_FUNCTION_ARGS)
SPI_freeplan(plan);
cachedLen = VARSIZE(formula) - VARHDRSZ;
SPI_freeplan(plan);
cachedLen = VARSIZE(formula) - VARHDRSZ;
- memcpy( cachedFormula, VARDATA(formula), VARSIZE(formula) - VARHDRSZ );
+ memcpy( cachedFormula, VARDATA(formula), VARSIZE(formula) - VARHDRSZ );
}
plan = cachedPlan;
}
plan = cachedPlan;
@@
-946,14
+950,14
@@
inarray(PG_FUNCTION_ARGS)
{
ArrayType *a;
SimpleArray *sa;
{
ArrayType *a;
SimpleArray *sa;
- Datum query = PG_GETARG_DATUM(1);
+ Datum query = PG_GETARG_DATUM(1);
Oid queryTypeOid;
Datum *StopLow,
*StopHigh,
*StopMiddle;
int cmp;
Oid queryTypeOid;
Datum *StopLow,
*StopHigh,
*StopMiddle;
int cmp;
- fcinfo->flinfo->fn_extra = SearchArrayCache(
+ fcinfo->flinfo->fn_extra = SearchArrayCache(
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
fcinfo->flinfo->fn_extra,
fcinfo->flinfo->fn_mcxt,
PG_GETARG_DATUM(0), &a, &sa, NULL);
@@
-970,7
+974,7
@@
inarray(PG_FUNCTION_ARGS)
StopLow = sa->elems;
StopHigh = sa->elems + sa->nelems;
StopLow = sa->elems;
StopHigh = sa->elems + sa->nelems;
- while (StopLow < StopHigh)
+ while (StopLow < StopHigh)
{
StopMiddle = StopLow + ((StopHigh - StopLow) >> 1);
cmp = cmpArrayElem(StopMiddle, &query, sa->info);
{
StopMiddle = StopLow + ((StopHigh - StopLow) >> 1);
cmp = cmpArrayElem(StopMiddle, &query, sa->info);