Fossil

Diff
Login

Differences From Artifact [0dfee06e96]:

To Artifact [bf8c2e6bb6]:


109
110
111
112
113
114
115
116

117
118
119
120
121
122
123
109
110
111
112
113
114
115

116
117
118
119
120
121
122
123







-
+








  memset(seen, 0, sizeof(seen));
  for(i=0; zDoc[i]; i++){
    char c = zDoc[i];
    if( isBoundary[c&0xff] ) continue;
    for(j=0; j<p->nTerm; j++){
      int n = p->a[j].n;
      if( sqlite3_strnicmp(p->a[j].z, &zDoc[i], n)==0 ){
      if( sqlite4_strnicmp(p->a[j].z, &zDoc[i], n)==0 ){
        score += 1;
        if( !seen[j] ){
          if( isBoundary[zDoc[i+n]&0xff] ) score += 10;
          seen[j] = 1;
        }
        if( j==iPrev+1 ){
          score += iBonus;
141
142
143
144
145
146
147
148

149
150

151
152
153
154



155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170
141
142
143
144
145
146
147

148
149

150
151



152
153
154
155
156
157
158
159
160
161
162

163
164
165
166
167
168
169
170







-
+

-
+

-
-
-
+
+
+








-
+







}

/*
** This is an SQLite function that scores its input using
** a pre-computed pattern.
*/
static void search_score_sqlfunc(
  sqlite3_context *context,
  sqlite4_context *context,
  int argc,
  sqlite3_value **argv
  sqlite4_value **argv
){
  Search *p = (Search*)sqlite3_user_data(context);
  int score = search_score(p, (const char*)sqlite3_value_text(argv[0]));
  sqlite3_result_int(context, score);
  Search *p = (Search*)sqlite4_user_data(context);
  int score = search_score(p, (const char*)sqlite4_value_text(argv[0]));
  sqlite4_result_int(context, score);
}

/*
** Register the "score()" SQL function to score its input text
** using the given Search object.  Once this function is registered,
** do not delete the Search object.
*/
void search_sql_setup(Search *p){
  sqlite3_create_function(g.db, "score", 1, SQLITE_UTF8, p,
  sqlite4_create_function(g.db, "score", 1, SQLITE_UTF8, p,
     search_score_sqlfunc, 0, 0);
}

/*
** Testing the search function.
**
** COMMAND: search*