2357 |
2357 |
cur.execute(sql_statement, sql_dict)
|
2358 |
2358 |
evo._sql_id = cur.fetchone()[0]
|
2359 |
2359 |
|
2360 |
|
fts_strings = [str(self.id), self.get_display_id()]
|
2361 |
|
fts_strings.append(self._formdef.name)
|
|
2360 |
fts_strings = []
|
|
2361 |
fts_strings.append(('A', str(self.id)))
|
|
2362 |
fts_strings.append(('A', self.get_display_id()))
|
|
2363 |
fts_strings.append(('C', self._formdef.name))
|
2362 |
2364 |
if self.tracking_code:
|
2363 |
|
fts_strings.append(self.tracking_code)
|
|
2365 |
fts_strings.append(('A', self.tracking_code))
|
2364 |
2366 |
|
2365 |
2367 |
def get_all_fields():
|
2366 |
2368 |
for field in self._formdef.get_all_fields():
|
... | ... | |
2385 |
2387 |
elif field.key in ('item', 'items'):
|
2386 |
2388 |
value = data.get('%s_display' % field.id)
|
2387 |
2389 |
if value:
|
|
2390 |
weight = 'C'
|
|
2391 |
if field.include_in_listing:
|
|
2392 |
weight = 'B'
|
2388 |
2393 |
if isinstance(value, str) and len(value) < 10000:
|
2389 |
2394 |
# avoid overlong strings, typically base64-encoded values
|
2390 |
|
fts_strings.append(value)
|
|
2395 |
fts_strings.append((weight, value))
|
2391 |
2396 |
elif type(value) in (tuple, list):
|
2392 |
|
fts_strings.extend(value)
|
|
2397 |
for val in value:
|
|
2398 |
fts_strings.append((weight, val))
|
2393 |
2399 |
if self._evolution:
|
2394 |
2400 |
for evo in self._evolution:
|
2395 |
2401 |
if evo.comment:
|
2396 |
|
fts_strings.append(evo.comment)
|
|
2402 |
fts_strings.append(('D', evo.comment))
|
2397 |
2403 |
for part in evo.parts or []:
|
2398 |
|
fts_strings.append(part.render_for_fts() if part.render_for_fts else '')
|
|
2404 |
fts_strings.append(('D', part.render_for_fts() if part.render_for_fts else ''))
|
2399 |
2405 |
user = self.get_user()
|
2400 |
2406 |
if user:
|
2401 |
|
fts_strings.append(user.get_display_name())
|
2402 |
|
|
2403 |
|
sql_statement = (
|
2404 |
|
'''UPDATE %s SET fts = to_tsvector( %%(fts)s)
|
2405 |
|
WHERE id = %%(id)s'''
|
2406 |
|
% self._table_name
|
2407 |
|
)
|
2408 |
|
cur.execute(
|
2409 |
|
sql_statement,
|
2410 |
|
{
|
2411 |
|
'id': self.id,
|
2412 |
|
'fts': FtsMatch.get_fts_value(' '.join(str(fts_string) for fts_string in fts_strings)),
|
2413 |
|
},
|
|
2407 |
fts_strings.append(('A', user.get_display_name()))
|
|
2408 |
|
|
2409 |
fts_parts = []
|
|
2410 |
parameters = {'id': self.id}
|
|
2411 |
for i, (weight, value) in enumerate(fts_strings):
|
|
2412 |
fts_parts.append("setweight(to_tsvector(%%(fts%s)s), '%s')" % (i, weight))
|
|
2413 |
parameters['fts%s' % i] = FtsMatch.get_fts_value(value)
|
|
2414 |
sql_statement = '''UPDATE %s SET fts = %s
|
|
2415 |
WHERE id = %%(id)s''' % (
|
|
2416 |
self._table_name,
|
|
2417 |
' || '.join(fts_parts),
|
2414 |
2418 |
)
|
|
2419 |
cur.execute(sql_statement, parameters)
|
2415 |
2420 |
|
2416 |
2421 |
conn.commit()
|
2417 |
2422 |
cur.close()
|
... | ... | |
2688 |
2693 |
|
2689 |
2694 |
fts_strings = []
|
2690 |
2695 |
if self.name:
|
2691 |
|
fts_strings.append(self.name)
|
2692 |
|
fts_strings.append(self.ascii_name)
|
|
2696 |
fts_strings.append(('A', self.name))
|
|
2697 |
fts_strings.append(('A', self.ascii_name))
|
2693 |
2698 |
if self.email:
|
2694 |
|
fts_strings.append(self.email)
|
|
2699 |
fts_strings.append(('B', self.email))
|
2695 |
2700 |
if user_formdef and user_formdef.fields:
|
2696 |
2701 |
for field in user_formdef.fields:
|
2697 |
2702 |
if not self.form_data.get(field.id):
|
... | ... | |
2703 |
2708 |
value = self.form_data.get('%s_display' % field.id)
|
2704 |
2709 |
if value:
|
2705 |
2710 |
if isinstance(value, str):
|
2706 |
|
fts_strings.append(value)
|
|
2711 |
fts_strings.append(('B', value))
|
2707 |
2712 |
elif type(value) in (tuple, list):
|
2708 |
|
fts_strings.extend(value)
|
2709 |
|
sql_statement = (
|
2710 |
|
'''UPDATE %s SET fts = to_tsvector( %%(fts)s)
|
2711 |
|
WHERE id = %%(id)s'''
|
2712 |
|
% self._table_name
|
|
2713 |
for val in value:
|
|
2714 |
fts_strings.append(('B', val))
|
|
2715 |
|
|
2716 |
fts_parts = []
|
|
2717 |
parameters = {'id': self.id}
|
|
2718 |
for i, (weight, value) in enumerate(fts_strings):
|
|
2719 |
fts_parts.append("setweight(to_tsvector(%%(fts%s)s), '%s')" % (i, weight))
|
|
2720 |
parameters['fts%s' % i] = FtsMatch.get_fts_value(value)
|
|
2721 |
sql_statement = '''UPDATE %s SET fts = %s
|
|
2722 |
WHERE id = %%(id)s''' % (
|
|
2723 |
self._table_name,
|
|
2724 |
' || '.join(fts_parts),
|
2713 |
2725 |
)
|
2714 |
|
cur.execute(sql_statement, {'id': self.id, 'fts': ' '.join(fts_strings)})
|
|
2726 |
cur.execute(sql_statement, parameters)
|
2715 |
2727 |
|
2716 |
2728 |
conn.commit()
|
2717 |
2729 |
cur.close()
|
... | ... | |
3758 |
3770 |
# latest migration, number + description (description is not used
|
3759 |
3771 |
# programmaticaly but will make sure git conflicts if two migrations are
|
3760 |
3772 |
# separately added with the same number)
|
3761 |
|
SQL_LEVEL = (58, 'add workflow_merged_roles_dict')
|
|
3773 |
SQL_LEVEL = (59, 'use setweight on formdata é user indexation')
|
3762 |
3774 |
|
3763 |
3775 |
|
3764 |
3776 |
def migrate_global_views(conn, cur):
|
... | ... | |
3879 |
3891 |
migrate_views(conn, cur)
|
3880 |
3892 |
for formdef in FormDef.select():
|
3881 |
3893 |
formdef.data_class().rebuild_security()
|
3882 |
|
if sql_level < 23:
|
|
3894 |
if sql_level < 59:
|
3883 |
3895 |
# 12: (second part), store fts in existing rows
|
3884 |
3896 |
# 21: (second part), store ascii_name of users
|
3885 |
3897 |
# 23: (first part), use misc.simplify() over full text queries
|
|
3898 |
# 59: use setweight on formdata é user indexation
|
3886 |
3899 |
set_reindex('user', 'needed', conn=conn, cur=cur)
|
3887 |
|
if sql_level < 58:
|
|
3900 |
if sql_level < 59:
|
3888 |
3901 |
# 17: store last_update_time in tables
|
3889 |
3902 |
# 18: add user name to full-text search index
|
3890 |
3903 |
# 21: (third part), add user ascii_names to full-text index
|
... | ... | |
3896 |
3909 |
# 41: update full text normalization
|
3897 |
3910 |
# 51: add index on formdata blockdef fields
|
3898 |
3911 |
# 55: update full text normalisation (switch to unidecode)
|
|
3912 |
# 59: use setweight on formdata é user indexation
|
3899 |
3913 |
set_reindex('formdata', 'needed', conn=conn, cur=cur)
|
3900 |
3914 |
if sql_level < 56:
|
3901 |
3915 |
from wcs.carddef import CardDef
|
3902 |
|
-
|