From 9fd4436cec84f61b69f71c41374526880649a65e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 6 Jul 2019 14:26:30 +0200 Subject: [PATCH 1/2] keep case in tables' and fields' names (#34559) --- tests/conftest.py | 3 ++- tests/olap.model | 33 ++++++++++++++++++++------------- tests/test_wcs.py | 13 +++++++------ wcs_olap/feeder.py | 26 +++++++++++++------------- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 2c5246f..71a2d64 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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() diff --git a/tests/olap.model b/tests/olap.model index d34f177..821dbbb 100644 --- a/tests/olap.model +++ b/tests/olap.model @@ -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", diff --git a/tests/test_wcs.py b/tests/test_wcs.py index b19c6ad..aabd262 100644 --- a/tests/test_wcs.py +++ b/tests/test_wcs.py @@ -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 diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index 021f3f5..62951fc 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -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( @@ -458,7 +458,7 @@ 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',)) @@ -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: @@ -692,12 +692,12 @@ class WcsFormdefFeeder(object): 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] @@ -837,7 +837,7 @@ class WcsFormdefFeeder(object): 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))) + ctx=dict(columns=', '.join(['"%s"' % column for column in self.columns[1:]]), values=', '.join(values))) # insert generic evolutions generic_evolutions = [] -- 2.22.0