538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
1
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
2 def crazy_sql_command(viewname, cols, keytab, linktab, id_col='id', dict_id='dict_id', pair_id='pair_id'):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
3
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
4 #create or replace view expview as select * from (select id as v1_id, value as nhid from
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
5 #test0 where name='nhid') nhid LEFT OUTER JOIN (select id as v2_id, value as lrate from
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
6 #test0 where name='lrate') lrate on nhid.v1_id = lrate.v2_id;
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
7
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
8 col_queries = []
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
9 colname0 = None
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
10 for i, (colname, table_col) in enumerate(cols):
|
633
|
11 safe_col = colname.replace('__','')
|
|
12 safe_col = safe_col.replace('.','__')
|
|
13
|
|
14 cols[i][0] = safe_col
|
|
15
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
16 if i == 0:
|
633
|
17 q = """(select %(dict_id)s as v%(i)s_id, %(table_col)s as %(safe_col)s
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
18 from \"%(keytab)s\", \"%(linktab)s\"
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
19 where name='%(colname)s'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
20 and \"%(keytab)s\".%(id_col)s = \"%(linktab)s\".%(pair_id)s)
|
633
|
21 %(safe_col)s """ % locals()
|
|
22 colname0 = safe_col
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
23 else:
|
633
|
24 q = """ LEFT OUTER JOIN (select %(dict_id)s as v%(i)s_id, %(table_col)s as %(safe_col)s
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
25 from \"%(keytab)s\", \"%(linktab)s\"
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
26 where name='%(colname)s'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
27 and \"%(keytab)s\".%(id_col)s = \"%(linktab)s\".%(pair_id)s)
|
633
|
28 %(safe_col)s
|
|
29 on %(colname0)s.v0_id = %(safe_col)s.v%(i)s_id""" % locals()
|
|
30
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
31 col_queries.append(q)
|
633
|
32
|
538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
33 header = " create or replace view %s as select %s.v0_id as id, %s from " \
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
34 % (viewname, colname0, (", ".join([c[0] for c in cols])))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
35
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
36 rval = header + "\n".join(col_queries)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
37
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
38 return rval
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
39
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
40
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
41 #print crazy_sql_command('test0', 'expview', (('nhid', 'value'), ('lrate', 'value'), ('a','value')))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
42
|