Projet

Général

Profil

0002-tomerge.patch

Benjamin Dauvergne, 24 juillet 2019 17:25

Télécharger (5,88 ko)

Voir les différences:

Subject: [PATCH 2/2] tomerge

 wcs_olap/feeder.py | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)
wcs_olap/feeder.py
384 384
        if self.prev_table_exists(name):
385 385
            # Insert data from previous table
386 386
            self.ex(
387
                'INSERT INTO {schema_temp}.{name} select * FROM {schema}.{name}',
387
                'INSERT INTO {schema_temp}."{name}" select * FROM {schema}."{name}"',
388 388
                ctx={'name': name}
389 389
            )
390 390
            # Find what is missing
391 391
            to_insert = []
392 392
            for _id, _label in labels:
393 393
                self.ex(
394
                    'SELECT * FROM {name} WHERE label = %s', ctx={'name': name}, vars=(_label,))
394
                    'SELECT * FROM "{name}" WHERE label = %s', ctx={'name': name}, vars=(_label,))
395 395
                if self.cur.fetchone() is None:
396 396
                    to_insert.append(_label)
397 397

  
398 398
            labels = None
399 399
            if to_insert:
400
                self.ex('SELECT MAX(id) FROM {name}', ctx={'name': name})
400
                self.ex('SELECT MAX(id) FROM "{name}"', ctx={'name': name})
401 401
                next_id = (self.cur.fetchone()[0] or 0) + 1
402 402
                ids = range(next_id, next_id + len(to_insert))
403 403
                labels = zip(ids, to_insert)
......
408 408

  
409 409
        if labels:
410 410
            tmpl = ', '.join(['(%s, %s)'] * len(labels))
411
            query_str = 'INSERT INTO {name} (id, label) VALUES %s' % tmpl
411
            query_str = 'INSERT INTO "{name}" (id, label) VALUES %s' % tmpl
412 412
            self.ex(query_str, ctx={'name': name}, vars=list(itertools.chain(*labels)))
413 413

  
414 414
        res = {}
415
        self.ex("SELECT id, label FROM %s" % str(name))
415
        self.ex('SELECT id, label FROM "{name}"', ctx={'name': name})
416 416
        for id_, label in self.cur.fetchall():
417 417
            res[label] = id_
418 418
        return res
......
461 461
        self.ex('CREATE TABLE "{form_table}" (id serial PRIMARY KEY,'
462 462
                ' category_id integer REFERENCES {category_table} (id),'
463 463
                ' label varchar)')
464
        self.ex('COMMENT ON TABLE {form_table} IS %s', vars=(u'types de formulaire',))
464
        self.ex('COMMENT ON TABLE "{form_table}" IS %s', vars=(u'types de formulaire',))
465 465
        # agents
466 466
        self.create_labeled_table_serial('agent', comment=u'agents')
467 467

  
......
661 661
        self.create_table('{formdata_table}', columns, inherits='{generic_formdata_table}',
662 662
                          comment=u'formulaire %s' % self.formdef.schema.name)
663 663
        for at, comment in comments.iteritems():
664
            self.ex('COMMENT ON COLUMN {formdata_table}."%s" IS %%s' % at, vars=(comment,))
664
            self.ex('COMMENT ON COLUMN "{formdata_table}"."%s" IS %%s' % at, vars=(comment,))
665 665

  
666 666
        # Creat index for JSON fields
667 667
        if self.has_jsonb:
......
676 676
                continue
677 677
            i = _type.index('REFERENCES')
678 678
            constraint = '%s_fk_constraint FOREIGN KEY (%s) %s' % (name, name, _type[i:])
679
            self.ex('ALTER TABLE {formdata_table} ADD CONSTRAINT %s' % constraint)
680
        self.ex('ALTER TABLE {formdata_table} ADD PRIMARY KEY (id)')
679
            self.ex('ALTER TABLE "{formdata_table}" ADD CONSTRAINT %s' % constraint)
680
        self.ex('ALTER TABLE "{formdata_table}" ADD PRIMARY KEY (id)')
681 681
        # table des evolutions
682 682
        self.create_table('{evolution_table}', [
683 683
            ['id', 'serial primary key'],
684
            ['status_id', 'smallint REFERENCES {status_table} (id)'],
685
            ['formdata_id', 'integer REFERENCES {formdata_table} (id)'],
684
            ['status_id', 'smallint REFERENCES "{status_table}" (id)'],
685
            ['formdata_id', 'integer REFERENCES "{formdata_table}" (id)'],
686 686
            ['time', 'timestamp'],
687 687
            ['date', 'date'],
688 688
            ['hour_id', 'smallint REFERENCES {hour_table} (id)'],
689 689
        ])
690
        self.ex('COMMENT ON TABLE {evolution_table} IS %s',
690
        self.ex('COMMENT ON TABLE "{evolution_table}" IS %s',
691 691
                vars=(u'evolution des demandes %s' % self.formdef.schema.name,))
692 692

  
693 693
    def insert_item_value(self, field, value):
......
836 836
        if not values:
837 837
            self.logger.warning('no data')
838 838
            return
839
        self.ex('INSERT INTO {formdata_table} ({columns}) VALUES {values} RETURNING id',
839
        self.ex('INSERT INTO "{formdata_table}" ({columns}) VALUES {values} RETURNING id',
840 840
                ctx=dict(columns=', '.join(['"%s"' % column for column in self.columns[1:]]), values=', '.join(values)))
841 841

  
842 842
        # insert generic evolutions
......
863 863
                row[0] = formdata_id
864 864
                evolutions.append(tuple(row))
865 865
                if len(evolutions) == 500:
866
                    self.ex('INSERT INTO {evolution_table} (%s) VALUES %s' % (
866
                    self.ex('INSERT INTO "{evolution_table}" (%s) VALUES %s' % (
867 867
                       ', '.join(['formdata_id', 'status_id', 'time', 'date', 'hour_id']),
868 868
                       ', '.join(['%s'] * len(evolutions))), vars=evolutions)
869 869
                    evolutions = []
870 870
        if evolutions:
871
            self.ex('INSERT INTO {evolution_table} (%s) VALUES %s' % (
871
            self.ex('INSERT INTO "{evolution_table}" (%s) VALUES %s' % (
872 872
                ', '.join(['formdata_id', 'status_id', 'time', 'date', 'hour_id']),
873 873
                ', '.join(['%s'] * len(evolutions))), vars=evolutions)
874 874

  
875
-