/[edbsilon]/trunk/edbsilon/Tabellen/auto_create_oracle.py
ViewVC logotype

Contents of /trunk/edbsilon/Tabellen/auto_create_oracle.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (show annotations)
Mon Sep 13 10:51:18 2004 UTC (20 years, 3 months ago) by ludwig
File MIME type: text/x-python
File size: 7508 byte(s)
2004-09-13  Ludwig Reiter <ludwig@intevation.de>

        * Tabellen/auto_create_oracle.py:
	Initial import

1 # Copyright (C) 2004 by Intevation GmbH
2 # Authors:
3 # Ludwig Reiter <[email protected]>
4 #
5 # This program is free software under the GPL (>=v2)
6 # Read the file COPYING coming with the software for details.
7
8 """Erzeugt automatisch CREATE-SQL-Kommandos aus dem Konfigurationsfile.
9 Benötigt 2 Argumente : Quell-Konffile Ziel-SQLfile
10 Beinhaltet Klasse Tab für Tabellen
11 und Liste tablist für die verschiedenen Tabellenobjekte
12
13 Liest eine Zeile des Konffiles und bearbeitet sie:
14 Wenn Kommentar:
15 nächste Zeile
16 Wenn Folienspezifikation(d.h. nur Folie und Tabellenflags gesetzt):
17 Wenn Folientabellen alle vorhanden
18 nächste Zeile
19 Sonst lege zusätzliche Tabellen an
20 (d.h. Tab anlegen und in tablist appenden)
21 Wenn BesondereInfospezifikation ohne Tabellenname:
22 Gehe die Folientabellen in tabliste durch und lege die
23 Attribute an, falls sie noch nicht vorhanden
24 Wenn BesondereInfospezifikation mit Tabellenname:
25 Wenn Tabelle noch nicht vorhanden:
26 Lege Tabelle an und appende sie in tablist
27 Wenn Attribute noch nicht vorhanden:
28 Lege Attribute in der Tabelle an
29 Nach diesen Durchlauf müssten alle anzulegenden Tabellen mit ihren
30 Attributen in tablist als Tab-Objekte stehen
31 Gehe tablist durch und erzeuge die SQL_Kommandos
32
33 Folientabellen haben die Namen folie<foliennr><p oder l oder f>
34 und mindestens die Attribute objnr, objart, aktualitaet, edatum, geom.
35
36 anderen Tabellen haben mindestens die Attribute objnr, artderinfo,
37 kartentyp, darstellungsart.
38 """
39
40 import sys
41
42 class Tab:
43 """Kontainer für den Tabellennamen und die Attribute + Art der Attribute
44 einer Tabelle. Speichert dies solange bis alle Konfigurationsdateizeilen
45 verarbeitet sind. Dann wird mit SQL_create die SQL -Create-Kommandos
46 erzeugt."""
47 def __init__(self, Name, ArtderTabelle):
48 """Name ist der Name der Tabelle
49 ArtderTabelle gibt an was für eine Tabelle erzeugt werden soll:
50 F für Folientabelle
51 Z für Zusatzdatentabelle ohne Geometrie
52 G für Zusatzdatentabelle mit Geometrie"""
53 self.Name = Name
54 self.Attribute = []
55 self.Attribute.append( ("objnr", "VARCHAR(7)") )
56 if ArtderTabelle == "F":
57 self.Attribute.append( ("objart", "INTEGER" ) )
58 self.Attribute.append( ("aktualitaet", "VARCHAR(2)"))
59 self.Attribute.append( ("edatum", "DATE"))
60 self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
61 elif ArtderTabelle in ['Z','G']:
62 self.Attribute.append( ("artderinfo", "INTEGER") )
63 self.Attribute.append( ("kartentyp", "VARCHAR(2)" ))
64 self.Attribute.append( ("darstellungsart", "INTEGER" ))
65 if ArtderTabelle == "G":
66 self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
67
68 def isin_Attribute(self, Attribut):
69 """sucht self.Attribute nach den Attribut durch:
70 1 falls vorhanden
71 0 sonst"""
72 for (Attname,dummy) in self.Attribute:
73 if Attname == Attribut:
74 return 1
75 return 0
76
77 def append_Attribut(self, Atttupel):
78 """fügt ein Attributtupel der Form ( Attributsnamen, Attributsart) in
79 self.Attribute ein, wenn noch nicht vorhanden."""
80 if not self.isin_Attribute( Atttupel[0]) and Atttupel[0] != "":
81 self.Attribute.append( Atttupel )
82
83 def get_Name(self):
84 """Gibt self.Name zurück"""
85 return self.Name
86
87 def create_SQL(self):
88 """erzeugt das CREATE-SQL-Kommando und gibt es zurück"""
89 SQL_Kom ="CREATE TABLE "
90 SQL_Kom += self.Name
91 SQL_Kom += "\n ( "
92 Komma =0
93 for (Attname, Attart) in self.Attribute: #Attname für Attributname
94 if Komma ==1: #Attart für Attributsart
95 SQL_Kom += ","
96 SQL_Kom += "\n "
97 SQL_Kom += Attname
98 SQL_Kom += " "
99 SQL_Kom += Attart
100 Komma =1
101 SQL_Kom += "\n ); \n"
102 return SQL_Kom
103
104 def name_in_tablist( Name):
105 """Schaut ob Name in einer Tabelle Tab in tablist der Name ist.
106 Gibt dann Tab zurück"""
107 for tab in tablist:
108 if Name == tab.get_Name():
109 return tab
110 return 0
111
112 def eintragen_Attribute( Name, Komma_split, Art):
113 """Trägt die Attribute in die Tabellen ein und legt die Tabellen an, falls
114 noch nicht vorhanden"""
115 if not name_in_tablist(Name):
116 Tabobj =Tab( Name , Art)
117 tablist.append( Tabobj )
118 else:
119 Tabobj = name_in_tablist( Name)
120 Attributlist = Komma_split[5].split(";")
121 for n in range( len( Attributlist )/2):
122 Tabobj.append_Attribut( (Attributlist[2*n],
123 "VARCHAR(" + Attributlist[2*n +1].strip()+")"))
124
125 # Initialisierung der tablist.
126 tablist =[]
127 try:
128 quelle = open( sys.argv[1] , "r" )
129 Konf_satz_liste = quelle.readlines()
130 finally:
131 quelle.close()
132 for Konf_satz in Konf_satz_liste:
133 if Konf_satz[0] =='#':
134 continue
135 Komma_split = Konf_satz.split(",")
136 if len(Komma_split) != 6:
137 print "warning: Die Konfigurationsdatei könnte falsch sein" + str(Komma_split)
138 continue
139 if Komma_split[1] =="" and Komma_split[2] =="":
140 Name = "folie" + Komma_split[0]
141 if "n" in Komma_split[4] and not name_in_tablist(Name):
142 tablist.append( Tab( Name ,"F"))
143 if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
144 tablist.append( Tab( Name+"_p" ,"F"))
145 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
146 tablist.append( Tab( Name+"_l" ,"F"))
147 if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
148 tablist.append( Tab( Name+"_f" ,"F"))
149 elif Komma_split[3] == "":
150 Name = "folie" + Komma_split[0]
151 if "n" in Komma_split[4]:
152 eintragen_Attribute( Name ,Komma_split)
153 if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
154 eintragen_Attribute( Name+"_p" ,Komma_split,"F")
155 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
156 eintragen_Attribute( Name+"_l" ,Komma_split,"F")
157 if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
158 eintragen_Attribute( Name+"_f" ,Komma_split,"F")
159 else:
160 Name = Komma_split[3]
161 if "n" in Komma_split[4]:
162 eintragen_Attribute( Name ,Komma_split, "Z")
163 if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
164 eintragen_Attribute( Name+"_p" ,Komma_split,"G")
165 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
166 eintragen_Attribute( Name+"_l" ,Komma_split,"G")
167 if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
168 eintragen_Attribute( Name+"_f" ,Komma_split,"G")
169
170 SQL_Kom = ""
171 for tab in tablist:
172 SQL_Kom += tab.create_SQL()
173 try:
174 ziel = open( sys.argv[2] , "w" )
175 ziel.write(SQL_Kom)
176 finally:
177 ziel.close()
178
179
180

Properties

Name Value
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26