keep case in tables' and fields' names (#34559)
This commit is contained in:
parent
da5435384d
commit
1d3705a7b1
|
@ -93,7 +93,8 @@ formdef.fields = [
|
|||
fields.ItemField(id='2', label='2nd field', type='item',
|
||||
items=['foo', 'bar', 'baz'], varname='item'),
|
||||
fields.BoolField(id='3', label='3rd field', type='bool', varname='bool'),
|
||||
fields.ItemField(id='4', label='4rth field', type='item', varname='item_open'),
|
||||
fields.ItemField(id='4', label='4rth field', type='item', varname='itemOpen'),
|
||||
fields.StringField(id='5', label='5th field', type='string', anonymise=False, varname='stringCaseSensitive'),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
|
|
|
@ -37,12 +37,12 @@
|
|||
"join" : [
|
||||
"formdef"
|
||||
],
|
||||
"label" : "formulaire",
|
||||
"name" : "formdef",
|
||||
"order_by" : "formdef.label",
|
||||
"type" : "integer",
|
||||
"value" : "formdef.id",
|
||||
"value_label" : "formdef.label"
|
||||
"label": "formulaire",
|
||||
"name": "formdef",
|
||||
"order_by": "formdef.label",
|
||||
"type": "integer",
|
||||
"value": "formdef.id",
|
||||
"value_label": "formdef.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
|
@ -268,13 +268,20 @@
|
|||
{
|
||||
"filter" : true,
|
||||
"join" : [
|
||||
"item_open"
|
||||
"itemOpen"
|
||||
],
|
||||
"label" : "4rth field",
|
||||
"name" : "item_open",
|
||||
"name" : "itemOpen",
|
||||
"type" : "integer",
|
||||
"value" : "\"item_open\".id",
|
||||
"value_label" : "\"item_open\".label"
|
||||
"value" : "\"itemOpen\".id",
|
||||
"value_label" : "\"itemOpen\".label"
|
||||
},
|
||||
{
|
||||
"filter": true,
|
||||
"label": "5th field",
|
||||
"name": "stringCaseSensitive",
|
||||
"type": "string",
|
||||
"value": "\"field_stringCaseSensitive\""
|
||||
}
|
||||
],
|
||||
"fact_table" : "formdata_demande",
|
||||
|
@ -343,9 +350,9 @@
|
|||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "field_item_open",
|
||||
"name" : "item_open",
|
||||
"table" : "formdata_demande_field_item_open"
|
||||
"master" : "field_itemOpen",
|
||||
"name" : "itemOpen",
|
||||
"table" : "formdata_demande_field_itemOpen"
|
||||
}
|
||||
],
|
||||
"key" : "id",
|
||||
|
|
|
@ -57,12 +57,13 @@ def test_wcs_fixture(wcs, postgres_db, tmpdir, olap_cmd, caplog):
|
|||
('formdata_demande', 'field_string'),
|
||||
('formdata_demande', 'field_item'),
|
||||
('formdata_demande', 'field_bool'),
|
||||
('formdata_demande', 'field_item_open'),
|
||||
('formdata_demande', 'field_itemOpen'),
|
||||
('formdata_demande', 'field_stringCaseSensitive'),
|
||||
('formdata_demande', 'function__receiver'),
|
||||
('formdata_demande_field_item', 'id'),
|
||||
('formdata_demande_field_item', 'label'),
|
||||
('formdata_demande_field_item_open', 'id'),
|
||||
('formdata_demande_field_item_open', 'label'),
|
||||
('formdata_demande_field_itemOpen', 'id'),
|
||||
('formdata_demande_field_itemOpen', 'label'),
|
||||
('formdef', 'id'),
|
||||
('formdef', 'category_id'),
|
||||
('formdef', 'label'),
|
||||
|
@ -130,7 +131,7 @@ def test_dimension_stability(wcs, wcs_dir, postgres_db, tmpdir, olap_cmd, caplog
|
|||
c.execute('SELECT * FROM formdata_demande_field_item ORDER BY id')
|
||||
refs = c.fetchall()
|
||||
assert len(refs) == 3
|
||||
c.execute('SELECT * FROM formdata_demande_field_item_open ORDER BY id')
|
||||
c.execute('SELECT * FROM "formdata_demande_field_itemOpen" ORDER BY id')
|
||||
open_refs = c.fetchall()
|
||||
assert len(open_refs) == 3
|
||||
|
||||
|
@ -181,7 +182,7 @@ formdata.store()
|
|||
assert new_refs[-1][1] == 'bazouka'
|
||||
bazouka_id = new_refs[-1][0]
|
||||
|
||||
c.execute('SELECT * FROM formdata_demande_field_item_open ORDER BY id')
|
||||
c.execute('SELECT * FROM "formdata_demande_field_itemOpen" ORDER BY id')
|
||||
new_open_refs = c.fetchall()
|
||||
assert len(new_open_refs) == 4
|
||||
for ref in open_refs:
|
||||
|
@ -189,7 +190,7 @@ formdata.store()
|
|||
assert new_open_refs[-1][1] == 'open_new_value'
|
||||
open_new_id = new_open_refs[-1][0]
|
||||
|
||||
c.execute('''SELECT field_item, field_item_open
|
||||
c.execute('''SELECT field_item, "field_itemOpen"
|
||||
FROM formdata_demande ORDER BY id''')
|
||||
formdata = c.fetchone()
|
||||
assert formdata[0] == bazouka_id
|
||||
|
|
|
@ -345,13 +345,13 @@ CREATE TABLE public.dates AS (SELECT
|
|||
AS the_date(the_date));''')
|
||||
|
||||
def create_table(self, name, columns, inherits=None, comment=None):
|
||||
sql = 'CREATE TABLE %s' % name
|
||||
sql += '(' + ', '.join('%s %s' % (n, t) for n, t in columns) + ')'
|
||||
sql = 'CREATE TABLE "%s"' % name
|
||||
sql += '(' + ', '.join('"%s" %s' % (n, t) for n, t in columns) + ')'
|
||||
if inherits:
|
||||
sql += ' INHERITS (%s)' % inherits
|
||||
sql += ' INHERITS ("%s")' % inherits
|
||||
self.ex(sql)
|
||||
if comment:
|
||||
self.ex('COMMENT ON TABLE %s IS %%s' % name, vars=(comment,))
|
||||
self.ex('COMMENT ON TABLE "%s" IS %%s' % name, vars=(comment,))
|
||||
|
||||
def prev_table_exists(self, name):
|
||||
query = """SELECT EXISTS (SELECT 1 FROM information_schema.tables
|
||||
|
@ -366,12 +366,12 @@ CREATE TABLE public.dates AS (SELECT
|
|||
if self.prev_table_exists(name):
|
||||
# Insert data from previous table
|
||||
self.ex(
|
||||
'INSERT INTO {schema_temp}.{name} SELECT * FROM {schema}.{name}',
|
||||
'INSERT INTO {schema_temp}."{name}" SELECT * FROM {schema}."{name}"',
|
||||
ctx={'name': name}
|
||||
)
|
||||
# Update sequence
|
||||
self.ex("""SELECT setval(pg_get_serial_sequence('{name}', 'id'),
|
||||
(SELECT GREATEST(1, MAX(id)) FROM {name}))""", ctx={'name': name})
|
||||
self.ex("""SELECT setval(pg_get_serial_sequence('"{name}"', 'id'),
|
||||
(SELECT GREATEST(1, MAX(id)) FROM "{name}"))""", ctx={'name': name})
|
||||
|
||||
def create_labeled_table(self, name, labels, comment=None):
|
||||
self.create_table(
|
||||
|
@ -384,20 +384,20 @@ CREATE TABLE public.dates AS (SELECT
|
|||
if self.prev_table_exists(name):
|
||||
# Insert data from previous table
|
||||
self.ex(
|
||||
'INSERT INTO {schema_temp}.{name} select * FROM {schema}.{name}',
|
||||
'INSERT INTO {schema_temp}."{name}" select * FROM {schema}."{name}"',
|
||||
ctx={'name': name}
|
||||
)
|
||||
# Find what is missing
|
||||
to_insert = []
|
||||
for _id, _label in labels:
|
||||
self.ex(
|
||||
'SELECT * FROM {name} WHERE label = %s', ctx={'name': name}, vars=(_label,))
|
||||
'SELECT * FROM "{name}" WHERE label = %s', ctx={'name': name}, vars=(_label,))
|
||||
if self.cur.fetchone() is None:
|
||||
to_insert.append(_label)
|
||||
|
||||
labels = None
|
||||
if to_insert:
|
||||
self.ex('SELECT MAX(id) FROM {name}', ctx={'name': name})
|
||||
self.ex('SELECT MAX(id) FROM "{name}"', ctx={'name': name})
|
||||
next_id = (self.cur.fetchone()[0] or 0) + 1
|
||||
ids = range(next_id, next_id + len(to_insert))
|
||||
labels = zip(ids, to_insert)
|
||||
|
@ -408,11 +408,11 @@ CREATE TABLE public.dates AS (SELECT
|
|||
|
||||
if labels:
|
||||
tmpl = ', '.join(['(%s, %s)'] * len(labels))
|
||||
query_str = 'INSERT INTO {name} (id, label) VALUES %s' % tmpl
|
||||
query_str = 'INSERT INTO "{name}" (id, label) VALUES %s' % tmpl
|
||||
self.ex(query_str, ctx={'name': name}, vars=list(itertools.chain(*labels)))
|
||||
|
||||
res = {}
|
||||
self.ex("SELECT id, label FROM %s" % str(name))
|
||||
self.ex('SELECT id, label FROM "{name}"', ctx={'name': name})
|
||||
for id_, label in self.cur.fetchall():
|
||||
res[label] = id_
|
||||
return res
|
||||
|
@ -458,10 +458,10 @@ CREATE TABLE public.dates AS (SELECT
|
|||
|
||||
self.create_labeled_table('status', self.status,
|
||||
comment=u'statuts simplifiés')
|
||||
self.ex('CREATE TABLE {form_table} (id serial PRIMARY KEY,'
|
||||
self.ex('CREATE TABLE "{form_table}" (id serial PRIMARY KEY,'
|
||||
' category_id integer REFERENCES {category_table} (id),'
|
||||
' label varchar)')
|
||||
self.ex('COMMENT ON TABLE {form_table} IS %s', vars=(u'types de formulaire',))
|
||||
self.ex('COMMENT ON TABLE "{form_table}" IS %s', vars=(u'types de formulaire',))
|
||||
# agents
|
||||
self.create_labeled_table_serial('agent', comment=u'agents')
|
||||
|
||||
|
@ -630,7 +630,7 @@ class WcsFormdefFeeder(object):
|
|||
else:
|
||||
# open item field, from data sources...
|
||||
self.create_labeled_table_serial(table_name, comment=comment)
|
||||
field_def = 'smallint REFERENCES %s (id)' % table_name
|
||||
field_def = 'smallint REFERENCES "%s" (id)' % table_name
|
||||
elif field.type == 'bool':
|
||||
field_def = 'boolean'
|
||||
elif field.type == 'string':
|
||||
|
@ -661,7 +661,7 @@ class WcsFormdefFeeder(object):
|
|||
self.create_table('{formdata_table}', columns, inherits='{generic_formdata_table}',
|
||||
comment=u'formulaire %s' % self.formdef.schema.name)
|
||||
for at, comment in comments.iteritems():
|
||||
self.ex('COMMENT ON COLUMN {formdata_table}.%s IS %%s' % at, vars=(comment,))
|
||||
self.ex('COMMENT ON COLUMN "{formdata_table}"."%s" IS %%s' % at, vars=(comment,))
|
||||
|
||||
# Creat index for JSON fields
|
||||
if self.has_jsonb:
|
||||
|
@ -676,28 +676,28 @@ class WcsFormdefFeeder(object):
|
|||
continue
|
||||
i = _type.index('REFERENCES')
|
||||
constraint = '%s_fk_constraint FOREIGN KEY (%s) %s' % (name, name, _type[i:])
|
||||
self.ex('ALTER TABLE {formdata_table} ADD CONSTRAINT %s' % constraint)
|
||||
self.ex('ALTER TABLE {formdata_table} ADD PRIMARY KEY (id)')
|
||||
self.ex('ALTER TABLE "{formdata_table}" ADD CONSTRAINT %s' % constraint)
|
||||
self.ex('ALTER TABLE "{formdata_table}" ADD PRIMARY KEY (id)')
|
||||
# table des evolutions
|
||||
self.create_table('{evolution_table}', [
|
||||
['id', 'serial primary key'],
|
||||
['status_id', 'smallint REFERENCES {status_table} (id)'],
|
||||
['formdata_id', 'integer REFERENCES {formdata_table} (id)'],
|
||||
['status_id', 'smallint REFERENCES "{status_table}" (id)'],
|
||||
['formdata_id', 'integer REFERENCES "{formdata_table}" (id)'],
|
||||
['time', 'timestamp'],
|
||||
['date', 'date'],
|
||||
['hour_id', 'smallint REFERENCES {hour_table} (id)'],
|
||||
])
|
||||
self.ex('COMMENT ON TABLE {evolution_table} IS %s',
|
||||
self.ex('COMMENT ON TABLE "{evolution_table}" IS %s',
|
||||
vars=(u'evolution des demandes %s' % self.formdef.schema.name,))
|
||||
|
||||
def insert_item_value(self, field, value):
|
||||
table_name = self.hash_table_name('{formdata_table}_field_%s' % field.varname)
|
||||
self.ex("SELECT id FROM {item_table} WHERE label = %s",
|
||||
self.ex('SELECT id FROM "{item_table}" WHERE label = %s',
|
||||
ctx={'item_table': table_name}, vars=(value,))
|
||||
res = self.cur.fetchone()
|
||||
if res:
|
||||
return res[0]
|
||||
self.ex('INSERT INTO {item_table} (label) VALUES (%s) RETURNING (id)', vars=(value,),
|
||||
self.ex('INSERT INTO "{item_table}" (label) VALUES (%s) RETURNING (id)', vars=(value,),
|
||||
ctx={'item_table': table_name})
|
||||
return self.cur.fetchone()[0]
|
||||
|
||||
|
@ -836,8 +836,8 @@ class WcsFormdefFeeder(object):
|
|||
if not values:
|
||||
self.logger.warning('no data')
|
||||
return
|
||||
self.ex('INSERT INTO {formdata_table} ({columns}) VALUES {values} RETURNING id',
|
||||
ctx=dict(columns=', '.join(self.columns[1:]), values=', '.join(values)))
|
||||
self.ex('INSERT INTO "{formdata_table}" ({columns}) VALUES {values} RETURNING id',
|
||||
ctx=dict(columns=', '.join(['"%s"' % column for column in self.columns[1:]]), values=', '.join(values)))
|
||||
|
||||
# insert generic evolutions
|
||||
generic_evolutions = []
|
||||
|
@ -863,12 +863,12 @@ class WcsFormdefFeeder(object):
|
|||
row[0] = formdata_id
|
||||
evolutions.append(tuple(row))
|
||||
if len(evolutions) == 500:
|
||||
self.ex('INSERT INTO {evolution_table} (%s) VALUES %s' % (
|
||||
self.ex('INSERT INTO "{evolution_table}" (%s) VALUES %s' % (
|
||||
', '.join(['formdata_id', 'status_id', 'time', 'date', 'hour_id']),
|
||||
', '.join(['%s'] * len(evolutions))), vars=evolutions)
|
||||
evolutions = []
|
||||
if evolutions:
|
||||
self.ex('INSERT INTO {evolution_table} (%s) VALUES %s' % (
|
||||
self.ex('INSERT INTO "{evolution_table}" (%s) VALUES %s' % (
|
||||
', '.join(['formdata_id', 'status_id', 'time', 'date', 'hour_id']),
|
||||
', '.join(['%s'] * len(evolutions))), vars=evolutions)
|
||||
|
||||
|
|
Loading…
Reference in New Issue