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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 30 - (hide annotations)
Thu Sep 23 15:19:48 2004 UTC (20 years, 2 months ago) by ludwig
File MIME type: text/x-python
File size: 9193 byte(s)
2004-09-23  Ludwig Reiter <ludwig@inteavtion.de>

        * Konverter/edbsclasses.py:
	Die Methode vorneeinfuegen von Linienzug wurde berichtigt.
        Beim Namen der Tabelle ist jetzt f stat folie

	* Konverter/Brandenburg.konf:
	Der Name der Tabellen ist am Anfang f und nicht mehr folie

	* test/Linebug.edb:
	Eine Testdatei f�r die Methode get_ganzeLinie f�r die
	objdaten_sammler. Testet einen bestimmten, jetzt gefixten Bug.

	* Konverter/edbsilon.py:
	Namen der Tabellen wurden von folie zu f am Anfang ge�ndert.

	* doc/spezifikation.tex:
	Ich habe ein Kapitel f�r den Gebrauch von edbsilon geschrieben

1 ludwig 23 # 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 ludwig 30 Folientabellen haben die Namen f<foliennr><_p oder _l oder _f>
34 ludwig 23 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 ludwig 24 F für Folientabelle mit Linien- oder Flächengeometrie
51     FP für Folientablle mit Punktgeometrie
52 ludwig 23 Z für Zusatzdatentabelle ohne Geometrie
53 ludwig 24 G für Zusatzdatentabelle mit Geometrie
54     GP für Zusatzdatentabelle mit Punktgeometrie"""
55 ludwig 23 self.Name = Name
56     self.Attribute = []
57     self.Attribute.append( ("objnr", "VARCHAR(7)") )
58 ludwig 24 if ArtderTabelle =="F" or ArtderTabelle == "FP" :
59 ludwig 23 self.Attribute.append( ("objart", "INTEGER" ) )
60     self.Attribute.append( ("aktualitaet", "VARCHAR(2)"))
61     self.Attribute.append( ("edatum", "DATE"))
62 ludwig 24 self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
63     if ArtderTabelle == "FP" :
64     self.Attribute.append( ("winkel", "INTEGER"))
65     elif ArtderTabelle == 'Z' or ArtderTabelle =='G'or ArtderTabelle=="GP":
66 ludwig 23 self.Attribute.append( ("artderinfo", "INTEGER") )
67     self.Attribute.append( ("kartentyp", "VARCHAR(2)" ))
68     self.Attribute.append( ("darstellungsart", "INTEGER" ))
69     if ArtderTabelle == "G":
70     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
71 ludwig 24 elif ArtderTabelle == "GP":
72     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
73     self.Attribute.append( ("winkel", "INTEGER") )
74 ludwig 23
75     def isin_Attribute(self, Attribut):
76     """sucht self.Attribute nach den Attribut durch:
77     1 falls vorhanden
78     0 sonst"""
79     for (Attname,dummy) in self.Attribute:
80     if Attname == Attribut:
81     return 1
82     return 0
83    
84     def append_Attribut(self, Atttupel):
85     """fügt ein Attributtupel der Form ( Attributsnamen, Attributsart) in
86     self.Attribute ein, wenn noch nicht vorhanden."""
87     if not self.isin_Attribute( Atttupel[0]) and Atttupel[0] != "":
88     self.Attribute.append( Atttupel )
89    
90     def get_Name(self):
91     """Gibt self.Name zurück"""
92     return self.Name
93    
94     def create_SQL(self):
95     """erzeugt das CREATE-SQL-Kommando und gibt es zurück"""
96     SQL_Kom ="CREATE TABLE "
97     SQL_Kom += self.Name
98     SQL_Kom += "\n ( "
99     Komma =0
100     for (Attname, Attart) in self.Attribute: #Attname für Attributname
101     if Komma ==1: #Attart für Attributsart
102     SQL_Kom += ","
103     SQL_Kom += "\n "
104     SQL_Kom += Attname
105     SQL_Kom += " "
106     SQL_Kom += Attart
107     Komma =1
108     SQL_Kom += "\n ); \n"
109     return SQL_Kom
110 ludwig 30
111     def erzeuge_Metadata_SQL(self):
112     """erzeugt die in die METADATA -Insert-SQL-Befehle und den
113     Index für diese Tabelle.
114     Dies muss man aendern, falls man die Indizes anpassen will."""
115     SQL_Kom = ""
116     if self.Name[-2:] in ['_p','_l','_f' ]:
117     # Anlegen der Metadaten
118     SQL_Kom = "INSERT INTO USER_SDO_GEOM_METADATA VALUES (\n '"
119     SQL_Kom += self.Name
120     SQL_Kom += "',\n'geom',\n"
121     SQL_Kom += "MDSYS.SDO_DIM_ARRAY( \n"
122    
123     SQL_Kom += " MDSYS.SDO_DIM_ELEMENT( 'X', 3345000, 3440000, 0.001 ), \n"
124     SQL_Kom += " MDSYS.SDO_DIM_ELEMENT( 'Y', 5682322, 5754034, 0.001 ) \n"
125     SQL_Kom += "), NULL ); \n"
126     # Erzeugen des Indexes
127     SQL_Kom += "CREATE INDEX "
128     SQL_Kom += self.Name
129     SQL_Kom += "_idx"
130     SQL_Kom += " ON "
131     SQL_Kom += self.Name
132     SQL_Kom += "(geom) INDEXTYPE IS MDSYS.SPATIAL_INDEX; \n"
133     return SQL_Kom
134    
135    
136 ludwig 23 def name_in_tablist( Name):
137     """Schaut ob Name in einer Tabelle Tab in tablist der Name ist.
138     Gibt dann Tab zurück"""
139     for tab in tablist:
140     if Name == tab.get_Name():
141     return tab
142     return 0
143    
144     def eintragen_Attribute( Name, Komma_split, Art):
145     """Trägt die Attribute in die Tabellen ein und legt die Tabellen an, falls
146     noch nicht vorhanden"""
147     if not name_in_tablist(Name):
148     Tabobj =Tab( Name , Art)
149     tablist.append( Tabobj )
150     else:
151     Tabobj = name_in_tablist( Name)
152     Attributlist = Komma_split[5].split(";")
153     for n in range( len( Attributlist )/2):
154     Tabobj.append_Attribut( (Attributlist[2*n],
155     "VARCHAR(" + Attributlist[2*n +1].strip()+")"))
156    
157     # Initialisierung der tablist.
158     tablist =[]
159     try:
160     quelle = open( sys.argv[1] , "r" )
161     Konf_satz_liste = quelle.readlines()
162     finally:
163     quelle.close()
164     for Konf_satz in Konf_satz_liste:
165     if Konf_satz[0] =='#':
166     continue
167     Komma_split = Konf_satz.split(",")
168     if len(Komma_split) != 6:
169     print "warning: Die Konfigurationsdatei könnte falsch sein" + str(Komma_split)
170     continue
171     if Komma_split[1] =="" and Komma_split[2] =="":
172 ludwig 30 Name = "f" + Komma_split[0]
173 ludwig 23 if "n" in Komma_split[4] and not name_in_tablist(Name):
174     tablist.append( Tab( Name ,"F"))
175     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
176 ludwig 24 tablist.append( Tab( Name+"_p" ,"FP"))
177 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
178     tablist.append( Tab( Name+"_l" ,"F"))
179     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
180     tablist.append( Tab( Name+"_f" ,"F"))
181     elif Komma_split[3] == "":
182 ludwig 30 Name = "f" + Komma_split[0]
183 ludwig 23 if "n" in Komma_split[4]:
184 ludwig 24 eintragen_Attribute( Name ,Komma_split, "F")
185 ludwig 23 if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
186 ludwig 24 eintragen_Attribute( Name+"_p" ,Komma_split,"FP")
187 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
188     eintragen_Attribute( Name+"_l" ,Komma_split,"F")
189     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
190     eintragen_Attribute( Name+"_f" ,Komma_split,"F")
191     else:
192     Name = Komma_split[3]
193     if "n" in Komma_split[4]:
194     eintragen_Attribute( Name ,Komma_split, "Z")
195     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
196 ludwig 24 eintragen_Attribute( Name+"_p" ,Komma_split,"GP")
197 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
198     eintragen_Attribute( Name+"_l" ,Komma_split,"G")
199     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
200     eintragen_Attribute( Name+"_f" ,Komma_split,"G")
201    
202 ludwig 30 SQL_Kom = ""
203     # Erzeugen der CREATE -Kommandos
204 ludwig 23 for tab in tablist:
205 ludwig 30 SQL_Kom += tab.create_SQL()
206     # Erzeugen der Metadaten und Index -Komandos
207     for tab in tablist:
208     SQL_Kom += tab.erzeuge_Metadata_SQL()
209 ludwig 23 try:
210     ziel = open( sys.argv[2] , "w" )
211     ziel.write(SQL_Kom)
212     finally:
213     ziel.close()
214    
215    
216    

Properties

Name Value
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26