207 |
207 |
return name
|
208 |
208 |
|
209 |
209 |
|
|
210 |
def get_field_id(field):
|
|
211 |
return 'f' + str(field.id).replace('-', '_')
|
|
212 |
|
210 |
213 |
def parse_clause(clause):
|
211 |
214 |
# returns a three-elements tuple with:
|
212 |
215 |
# - a list of SQL 'WHERE' clauses
|
... | ... | |
450 |
453 |
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
|
451 |
454 |
if sql_type is None:
|
452 |
455 |
continue
|
453 |
|
needed_fields.add('f%s' % field.id)
|
454 |
|
if 'f%s' % field.id not in existing_fields:
|
|
456 |
needed_fields.add(get_field_id(field))
|
|
457 |
if get_field_id(field) not in existing_fields:
|
455 |
458 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s %s''' % (
|
456 |
459 |
table_name,
|
457 |
|
'f%s' % field.id,
|
|
460 |
get_field_id(field),
|
458 |
461 |
sql_type))
|
459 |
462 |
if field.store_display_value:
|
460 |
|
needed_fields.add('f%s_display' % field.id)
|
461 |
|
if 'f%s_display' % field.id not in existing_fields:
|
|
463 |
needed_fields.add('%s_display' % get_field_id(field))
|
|
464 |
if '%s_display' % get_field_id(field) not in existing_fields:
|
462 |
465 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s varchar''' % (
|
463 |
|
table_name, 'f%s_display' % field.id))
|
|
466 |
table_name,
|
|
467 |
'%s_display' % get_field_id(field)))
|
464 |
468 |
if field.store_structured_value:
|
465 |
469 |
needed_fields.add('f%s_structured' % field.id)
|
466 |
|
if 'f%s_structured' % field.id not in existing_fields:
|
|
470 |
if '%s_structured' % get_field_id(field) not in existing_fields:
|
467 |
471 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s bytea''' % (
|
468 |
|
table_name, 'f%s_structured' % field.id))
|
|
472 |
table_name,
|
|
473 |
'%s_structured' % get_field_id(field)))
|
469 |
474 |
|
470 |
475 |
for field in (formdef.geolocations or {}).keys():
|
471 |
476 |
column_name = 'geoloc_%s' % field
|
... | ... | |
563 |
568 |
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
|
564 |
569 |
if sql_type is None:
|
565 |
570 |
continue
|
566 |
|
needed_fields.add('f%s' % field.id)
|
567 |
|
if 'f%s' % field.id not in existing_fields:
|
|
571 |
needed_fields.add(get_field_id(field))
|
|
572 |
if get_field_id(field) not in existing_fields:
|
568 |
573 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s %s''' % (
|
569 |
574 |
table_name,
|
570 |
|
'f%s' % field.id,
|
|
575 |
get_field_id(field),
|
571 |
576 |
sql_type))
|
572 |
577 |
if field.store_display_value:
|
573 |
|
needed_fields.add('f%s_display' % field.id)
|
574 |
|
if 'f%s_display' % field.id not in existing_fields:
|
|
578 |
needed_fields.add('%s_display' % get_field_id(field))
|
|
579 |
if '%s_display' % get_field_id(field) not in existing_fields:
|
575 |
580 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s varchar''' % (
|
576 |
|
table_name, 'f%s_display' % field.id))
|
|
581 |
table_name, '%s_display' % get_field_id(field)))
|
577 |
582 |
if field.store_structured_value:
|
578 |
|
needed_fields.add('f%s_structured' % field.id)
|
579 |
|
if 'f%s_structured' % field.id not in existing_fields:
|
|
583 |
needed_fields.add('%s_structured' % get_field_id(field))
|
|
584 |
if '%s_structured' % get_field_id(field) not in existing_fields:
|
580 |
585 |
cur.execute('''ALTER TABLE %s ADD COLUMN %s bytea''' % (
|
581 |
|
table_name, 'f%s_structured' % field.id))
|
|
586 |
table_name, '%s_structured' % get_field_id(field)))
|
582 |
587 |
|
583 |
588 |
# migrations
|
584 |
589 |
if not 'fts' in existing_fields:
|
... | ... | |
742 |
747 |
|
743 |
748 |
column_names = {}
|
744 |
749 |
for field in formdef.get_all_fields():
|
745 |
|
field_key = 'f%s' % field.id
|
|
750 |
field_key = get_field_id(field)
|
746 |
751 |
if field.type in ('page', 'title', 'subtitle', 'comment'):
|
747 |
752 |
continue
|
748 |
753 |
if field.varname:
|
... | ... | |
751 |
756 |
# doesn't contain invalid characters.
|
752 |
757 |
field_name = 'f_%s' % get_name_as_sql_identifier(field.varname)[:50]
|
753 |
758 |
else:
|
754 |
|
field_name = 'f%s_%s' % (field.id, get_name_as_sql_identifier(field.label))
|
|
759 |
field_name = '%s_%s' % (get_field_id(field), get_name_as_sql_identifier(field.label))
|
755 |
760 |
field_name = field_name[:50]
|
756 |
761 |
if field_name in column_names:
|
757 |
762 |
# it may happen that the same varname is used on multiple fields
|
... | ... | |
763 |
768 |
column_names[field_name] = 1
|
764 |
769 |
view_fields.append((field_key, field_name))
|
765 |
770 |
if field.store_display_value:
|
766 |
|
field_key = 'f%s_display' % field.id
|
|
771 |
field_key = '%s_display' % get_field_id(field)
|
767 |
772 |
view_fields.append((field_key, field_name + '_display'))
|
768 |
773 |
|
769 |
774 |
view_fields.append(('''ARRAY(SELECT status FROM %s_evolutions '''\
|
... | ... | |
1088 |
1093 |
value = bytearray(cPickle.dumps(value, protocol=2))
|
1089 |
1094 |
elif sql_type == 'boolean':
|
1090 |
1095 |
pass
|
1091 |
|
sql_dict['f%s' % field.id] = value
|
|
1096 |
sql_dict[get_field_id(field)] = value
|
1092 |
1097 |
if field.store_display_value:
|
1093 |
|
sql_dict['f%s_display' % field.id] = data.get('%s_display' % field.id)
|
|
1098 |
sql_dict['%s_display' % get_field_id(field)] = data.get('%s_display' % field.id)
|
1094 |
1099 |
if field.store_structured_value:
|
1095 |
|
sql_dict['f%s_structured' % field.id] = bytearray(
|
|
1100 |
sql_dict['%s_structured' % get_field_id(field)] = bytearray(
|
1096 |
1101 |
cPickle.dumps(data.get('%s_structured' % field.id), protocol=2))
|
1097 |
1102 |
return sql_dict
|
1098 |
1103 |
|
... | ... | |
1479 |
1484 |
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
|
1480 |
1485 |
if sql_type is None:
|
1481 |
1486 |
continue
|
1482 |
|
data_fields.append('f%s' % field.id)
|
|
1487 |
data_fields.append(get_field_id(field))
|
1483 |
1488 |
if field.store_display_value:
|
1484 |
|
data_fields.append('f%s_display' % field.id)
|
|
1489 |
data_fields.append('%s_display' % get_field_id(field))
|
1485 |
1490 |
if field.store_structured_value:
|
1486 |
|
data_fields.append('f%s_structured' % field.id)
|
|
1491 |
data_fields.append('%s_structured' % get_field_id(field))
|
1487 |
1492 |
return data_fields
|
1488 |
1493 |
|
1489 |
1494 |
@classmethod
|
... | ... | |
1722 |
1727 |
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
|
1723 |
1728 |
if sql_type is None:
|
1724 |
1729 |
continue
|
1725 |
|
data_fields.append('f%s' % field.id)
|
|
1730 |
data_fields.append(get_field_id(field))
|
1726 |
1731 |
if field.store_display_value:
|
1727 |
|
data_fields.append('f%s_display' % field.id)
|
|
1732 |
data_fields.append('%s_display' % get_field_id(field))
|
1728 |
1733 |
if field.store_structured_value:
|
1729 |
|
data_fields.append('f%s_structured' % field.id)
|
|
1734 |
data_fields.append('%s_structured' % get_field_id(field))
|
1730 |
1735 |
return data_fields
|
1731 |
1736 |
|
1732 |
1737 |
@classmethod
|