/*-------------------------------------------------------------------------
*
* Portions Copyright (c) 2004-2012, PostgreSQL Global Development Group
+ * Portions Copyright (c) 2013-2015, NTT DATA Corporation
*
* Changelog:
- * 2013/01/09
- * Support full text search using bigrams.
- * Author: NTT DATA Corporation
+ * 2013/01/09
+ * Support full text search using bigrams.
+ * Author: NTT DATA Corporation
*
*-------------------------------------------------------------------------
*/
#include "utils/builtins.h"
/* GUC variable */
-extern bool bigm_enable_recheck;
+extern bool bigm_enable_recheck;
extern int bigm_gin_key_limit;
+extern double bigm_similarity_limit;
+extern char *bigm_last_update;
/* options */
#define LPADDING 1
/* operator strategy numbers */
#define LikeStrategyNumber 1
+#define SimilarityStrategyNumber 2
typedef struct
{
- bool pmatch; /* partial match is required? */
- int bytelen; /* byte length of bi-gram string */
+ bool pmatch; /* partial match is required? */
+ int8 bytelen; /* byte length of bi-gram string */
+
/*
- * Bi-gram string; we assume here that the maximum bytes for
- * a character are four.
+ * Bi-gram string; we assume here that the maximum bytes for a character
+ * are four.
*/
- char str[8];
-} bigm;
+ char str[8];
+} bigm;
#define BIGMSIZE sizeof(bigm)
-int bigmstrcmp(char *arg1, int len1, char *arg2, int len2);
+extern inline int bigmstrcmp(char *arg1, int len1, char *arg2, int len2);
#define CMPBIGM(a,b) ( bigmstrcmp(((bigm *)a)->str, ((bigm *)a)->bytelen, ((bigm *)b)->str, ((bigm *)b)->bytelen) )
#define CPBIGM(bptr, s, len) do { \
{
int32 vl_len_; /* varlena header (do not touch directly!) */
char data[1];
-} BIGM;
+} BIGM;
#define CALCGTSIZE(len) (VARHDRSZ + len * sizeof(bigm))
#define GETARR(x) ( (bigm *)( (char*)x + VARHDRSZ ) )
#define ARRNELEM(x) ( ( VARSIZE(x) - VARHDRSZ )/sizeof(bigm) )
-BIGM *generate_bigm(char *str, int slen);
-BIGM *generate_wildcard_bigm(const char *str, int slen, bool *removeDups);
+extern BIGM *generate_bigm(char *str, int slen);
+extern BIGM *generate_wildcard_bigm(const char *str, int slen, bool *removeDups);
#endif /* __BIGM_H__ */