database_create_notizen: "
CREATE TABLE notizen (
    pk INTEGER PRIMARY KEY,
    notiz TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_notizen_geom: "
SELECT AddGeometryColumn('notizen', 'geom', :epsg, 'POINT', 2);"

database_createspatialindex_notizen_geom: "
SELECT CreateSpatialIndex('notizen', 'geom');"

database_create_haltungen: "
CREATE TABLE haltungen (
    pk INTEGER PRIMARY KEY,
    haltnam TEXT,
    schoben TEXT,                                   /* join schaechte.schnam */
    schunten TEXT,                                  /* join schaechte.schnam */
    hoehe REAL,                                     /* Profilhoehe (mm) */
    breite REAL,                                    /* Profilbreite (mm) */
    laenge REAL,                                    /* abweichende Haltungslänge (m) */
    aussendurchmesser REAL,
    sohleoben REAL,                                 /* Sohlhöhe oben (m) */
    sohleunten REAL,                                /* Sohlhöhe unten (m) */
    baujahr INT,
    eigentum TEXT,                                  /* join eigentum.name */
    teilgebiet TEXT,                                /* join teilgebiet.tgnam */
    strasse TEXT,                                   /* für ISYBAU benötigt */
    profilnam TEXT DEFAULT 'Kreisquerschnitt',      /* join profile.profilnam */
    entwart TEXT DEFAULT 'Regenwasser',             /* join entwaesserungsarten.bezeichnung */
    material TEXT,                                  /* join material.bezeichnung */
    profilauskleidung TEXT,
    innenmaterial TEXT,
    ks REAL DEFAULT 1.5,                            /* abs. Rauheit (mmm, Prandtl-Colebrook) */
    haltungstyp TEXT DEFAULT 'Haltung',             /* join haltungstypen.bezeichnung */
    simstatus TEXT DEFAULT 'vorhanden',             /* join simulationsstatus.bezeichnung */
    rwanschluss INTEGER DEFAULT 1,                  /* soll bei TEZG-Erstellung berücksichtigt werden */
    druckdicht INTEGER DEFAULT 0,                   /* Druckleitung */
    xschob REAL,
    yschob REAL,
    xschun REAL,
    yschun REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_haltungen_geom: "
SELECT AddGeometryColumn('haltungen', 'geom', :epsg, 'LINESTRING', 2);"

database_createspatialindex_haltungen_geom: "
SELECT CreateSpatialIndex('haltungen', 'geom');"

database_create_haltungen_untersucht: "
CREATE TABLE haltungen_untersucht(
    pk INTEGER PRIMARY KEY,
    haltnam TEXT,
    bezugspunkt TEXT,
    schoben TEXT,                                   /* join schaechte.schnam */
    schunten TEXT,                                  /* join schaechte.schnam */
    hoehe REAL,                                     /* Profilhoehe (mm) */
    breite REAL,                                    /* Profilbreite (mm) */
    laenge REAL,                                    /* abweichende Haltungslänge (m) */
    baujahr INTEGER,
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT,
    untersucher TEXT,
    untersuchrichtung TEXT,
    wetter INTEGER DEFAULT 0,
    bewertungsart TEXT,
    bewertungstag TEXT,
    strasse TEXT,
    datenart TEXT,
    auftragsbezeichnung TEXT,
    max_ZD INTEGER,
    max_ZB INTEGER, 
    max_ZS INTEGER,
    xschob REAL,
    yschob REAL,
    xschun REAL,
    yschun REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_haltungen_untersucht_geom: "
SELECT AddGeometryColumn('haltungen_untersucht', 'geom', :epsg, 'LINESTRING', 2);"

database_createspatialindex_haltungen_untersucht_geom: "
SELECT CreateSpatialIndex('haltungen_untersucht', 'geom');"

database_create_untersuchdat_haltung: "
CREATE TABLE untersuchdat_haltung (
    pk INTEGER PRIMARY KEY,
    untersuchhal TEXT,
    schoben TEXT,                                   /* join schaechte.schnam  */
    schunten TEXT,                                  /* join schaechte.schnam */
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT,
    bandnr INTEGER,
    videozaehler TEXT,
    inspektionslaenge REAL,
    station REAL,
    stationtext REAL,
    timecode TEXT,
    video_offset REAL,
    langtext TEXT,
    kuerzel TEXT,
    charakt1 TEXT,
    charakt2 TEXT,
    quantnr1 REAL, 
    quantnr2 REAL, 
    streckenschaden TEXT,
    streckenschaden_lfdnr INTEGER,
    pos_von INTEGER, 
    pos_bis INTEGER,
    foto_dateiname TEXT,
    film_dateiname TEXT,
    ordner_bild TEXT,
    ordner_video TEXT,
    filmtyp INTEGER,
    video_start INTEGER,
    video_ende INTEGER,
    ZD INTEGER,
    ZB INTEGER,
    ZS INTEGER,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_untersuchdat_haltung_geom: "
SELECT AddGeometryColumn('untersuchdat_haltung', 'geom', :epsg, 'LINESTRING',2);"

database_createspatialindex_untersuchdat_haltung_geom: "
SELECT CreateSpatialIndex('untersuchdat_haltung', 'geom');"

database_create_anschlussleitungen: "
CREATE TABLE anschlussleitungen (
    pk INTEGER PRIMARY KEY,
    leitnam TEXT,
    schoben TEXT,                                   /* join schaechte.schnam */
    schunten TEXT,                                  /* join schaechte.schnam */
    hoehe REAL,                                     /* Profilhoehe (mm) */
    breite REAL,                                    /* Profilbreite (mm) */
    laenge REAL,                                    /* abweichende Haltungslänge (m) */
    aussendurchmesser REAL,
    sohleoben REAL,                                 /* Sohlhöhe oben (m) */
    sohleunten REAL,                                /* Sohlhöhe unten (m) */
    baujahr INTEGER,
    haltnam TEXT,                                   /* Anschluss an Haltung */
    urstation REAL,                                 /* Anschlussposition gegen Fließrichtung */
    ursprung TEXT,                                  /* Adresse oder Objektbezeichnung */
    anschlusstyp TEXT,                              /* M150-Knotenart */
    lageanschluss INTEGER,                          /* als Uhrzeit 1 - 12 */
    teilgebiet TEXT,                                /* join teilgebiet.tgnam */
    strasse TEXT,                                   /* für ISYBAU benötigt */
    profilnam TEXT DEFAULT 'Kreisquerschnitt',      /* join profile.profilnam */
    entwart TEXT DEFAULT 'Regenwasser',             /* join entwaesserungsarten.bezeichnung */
    material TEXT,                                  /* join material.bezeichnung */
    profilauskleidung TEXT,
    innenmaterial TEXT,
    ks REAL DEFAULT 1.5,
    simstatus TEXT DEFAULT 'vorhanden',             /* join simulationsstatus.bezeichnung */
    xschob REAL,
    yschob REAL,
    xschun REAL,
    yschun REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_anschlussleitungen_geom: "
SELECT AddGeometryColumn('anschlussleitungen', 'geom', :epsg, 'LINESTRING',2);"

database_createspatialindex_anschlussleitungen_geom: "
SELECT CreateSpatialIndex('anschlussleitungen', 'geom');"

database_create_anschlussleitungen_untersucht: "
CREATE TABLE anschlussleitungen_untersucht(
    pk INTEGER PRIMARY KEY,
    leitnam TEXT,
    bezugspunkt TEXT,
    schoben TEXT,                                   /* join schaechte.schnam */
    schunten TEXT,                                  /* join schaechte.schnam */
    hoehe REAL,                                     /* Profilhoehe (mm) */
    breite REAL,                                    /* Profilbreite (mm) */
    laenge REAL,                                    /* abweichende Haltungslänge (m) */
    baujahr INTEGER,
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT,
    untersucher TEXT,
    untersuchrichtung TEXT,
    wetter INTEGER DEFAULT 0,
    bewertungsart TEXT,
    bewertungstag TEXT,
    strasse TEXT,
    datenart TEXT,
    auftragsbezeichnung TEXT,
    max_ZD INTEGER,
    max_ZB INTEGER, 
    max_ZS INTEGER,
    xschob REAL,
    yschob REAL,
    xschun REAL,
    yschun REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_anschlussleitungen_untersucht_geom: "
SELECT AddGeometryColumn('anschlussleitungen_untersucht', 'geom', :epsg, 'LINESTRING',2);"

database_createspatialindex_anschlussleitungen_untersucht_geom: "
SELECT CreateSpatialIndex('anschlussleitungen_untersucht', 'geom');"

database_create_untersuchdat_anschlussleitung: "
CREATE TABLE untersuchdat_anschlussleitung (
    pk INTEGER PRIMARY KEY,
    untersuchleit TEXT,
    schoben TEXT,                                   /* join schaechte.schnam  */
    schunten TEXT,                                  /* join schaechte.schnam */
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT,
    bandnr INTEGER,
    videozaehler TEXT,
    inspektionslaenge REAL,
    station REAL,
    stationtext REAL,
    timecode TEXT,
    video_offset REAL,
    langtext TEXT,
    kuerzel TEXT,
    charakt1 TEXT,
    charakt2 TEXT,
    quantnr1 REAL, 
    quantnr2 REAL, 
    streckenschaden TEXT,
    streckenschaden_lfdnr INTEGER,
    pos_von INTEGER, 
    pos_bis INTEGER,
    foto_dateiname TEXT,
    film_dateiname TEXT,
    ordner_bild TEXT,
    ordner_video TEXT,
    filmtyp INTEGER,
    video_start INTEGER,
    video_ende INTEGER,
    ZD INTEGER,
    ZB INTEGER,
    ZS INTEGER,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_untersuchdat_anschlussleitung_geom: "
SELECT AddGeometryColumn('untersuchdat_anschlussleitung', 'geom', :epsg, 'LINESTRING',2);"

database_createspatialindex_untersuchdat_anschlussleitung_geom: "
SELECT CreateSpatialIndex('untersuchdat_anschlussleitung', 'geom');"

database_create_schaechte: "
CREATE TABLE schaechte (
    pk INTEGER PRIMARY KEY,
    schnam TEXT,
    sohlhoehe REAL,
    deckelhoehe REAL,
    durchm REAL,                                    /* Schachtdurchmesser (m) */
    druckdicht INTEGER, 
    ueberstauflaeche REAL DEFAULT 0,
    entwart TEXT DEFAULT 'Regenwasser',             /* join entwaesserungsarten.bezeichnung */
    strasse TEXT,
    baujahr INTEGER,
    eigentum TEXT,                                  /* join eigentum.name */
    teilgebiet TEXT,                                /* join teilgebiet.tgnam */
    knotentyp TEXT,                                 /* join knotentypen.knotentyp */
    auslasstyp TEXT,                                /* join auslasstypen.bezeichnung */
    schachttyp TEXT DEFAULT 'Schacht',              /* join schachttypen.schachttyp */
    simstatus TEXT DEFAULT 'vorhanden',             /* join simulationsstatus.bezeichnung */
    material TEXT,                                  /* join material.bezeichnung */
    xsch REAL, 
    ysch REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_schaechte_geop: "
SELECT AddGeometryColumn('schaechte', 'geop', :epsg, 'POINT', 2);"

database_add_schaechte_geom: "
SELECT AddGeometryColumn('schaechte', 'geom', :epsg, 'MULTILINESTRING',2);"

database_createspatialindex_schaechte_geom: "
SELECT CreateSpatialIndex('schaechte', 'geom');"

database_createspatialindex_schaechte_geop: "
SELECT CreateSpatialIndex('schaechte', 'geop');"

database_create_schaechte_untersucht: "
CREATE TABLE schaechte_untersucht (
    pk INTEGER PRIMARY KEY,
    schnam TEXT, 
    durchm REAL,                                    /* Schachtdurchmesser (m) */
    baujahr INTEGER,
    bezugspunkt TEXT,
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT, 
    untersucher TEXT, 
    wetter INTEGER DEFAULT 0, 
    strasse TEXT,
    bewertungsart TEXT, 
    bewertungstag TEXT,
    datenart TEXT,
    auftragsbezeichnung TEXT,
    max_ZD INTEGER,
    max_ZB INTEGER,
    max_ZS INTEGER, 
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP
);"

database_add_schaechte_untersucht_geop: "
SELECT AddGeometryColumn('schaechte_untersucht', 'geop', :epsg, 'POINT',2);"

database_createspatialindex_schaechte_untersucht_geop: "
SELECT CreateSpatialIndex('schaechte_untersucht', 'geop');"

database_create_untersuchdat_schacht: "
CREATE TABLE untersuchdat_schacht (
    pk INTEGER PRIMARY KEY,
    untersuchsch TEXT,
    id INTEGER,                                     /* absolute Nummer der Inspektion */
    untersuchtag TEXT,
    bandnr INTEGER,
    videozaehler TEXT,
    timecode TEXT,
    langtext TEXT,
    kuerzel TEXT,
    charakt1 TEXT,
    charakt2 TEXT,
    quantnr1 REAL,
    quantnr2 REAL,
    streckenschaden TEXT,
    streckenschaden_lfdnr INTEGER,
    pos_von INTEGER,
    pos_bis INTEGER,
    vertikale_lage INTEGER,
    inspektionslaenge INTEGER,
    bereich TEXT,
    foto_dateiname TEXT,
    ordner_bild TEXT,
    film_dateiname TEXT,
    ordner_video TEXT,
    filmtyp INTEGER,
    video_start INTEGER,
    video_ende INTEGER,
    ZD INTEGER,
    ZB INTEGER,
    ZS INTEGER,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP
);"

database_add_untersuchdat_schacht_geom: "
SELECT AddGeometryColumn('untersuchdat_schacht', 'geom', :epsg, 'LINESTRING',2);"

database_createspatialindex_untersuchdat_schacht_geom: "
SELECT CreateSpatialIndex('untersuchdat_schacht', 'geom');"

database_create_anschlussschaechte: "
CREATE TABLE anschlussschaechte (
    pk INTEGER PRIMARY KEY,
    schnam TEXT,
    sohlhoehe REAL,
    deckelhoehe REAL,
    durchm REAL,                                    /* Schachtdurchmesser (m) */
    druckdicht INTEGER, 
    entwart TEXT DEFAULT 'Regenwasser',             /* join entwaesserungsarten.bezeichnung */
    strasse TEXT,
    baujahr INTEGER,
    eigentum TEXT,                                  /* join eigentum.name */
    teilgebiet TEXT,                                /* join teilgebiet.tgnam */
    simstatus TEXT DEFAULT 'vorhanden',             /* join simulationsstatus.bezeichnung */
    material TEXT,                                  /* join material.bezeichnung */
    xsch REAL, 
    ysch REAL,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_anschlussschaechte_geom: "
SELECT AddGeometryColumn('anschlussschaechte', 'geom', :epsg, 'POINT', 2);"

database_createspatialindex_anschlussschaechte_geom: "
SELECT CreateSpatialIndex('anschlussschaechte', 'geom');"

# Einzugsgebiete 
# Entsprechen in HYSTEM-EXTRAN 7.x den Siedlungstypen
# "flaeche" wird nur für den Import benötigt, wenn keine Flächenobjekte vorhanden sind
# Verwendung:
# Spezifische Verbrauchsdaten in Verbindung mit "einwohner"

database_create_einzugsgebiete: "
CREATE TABLE einzugsgebiete (
    pk INTEGER PRIMARY KEY,
    tgnam TEXT,
    ewdichte REAL,                          /* ewdichte (EW/ha) */
    wverbrauch REAL,                        /* wverbrauch (l/(EW·d)) */
    stdmittel REAL,                         /* stdmittel (h/d) */
    fremdwas REAL,                          /* fremdwas (%) */
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_einzugsgebiete_geom: "
SELECT AddGeometryColumn('einzugsgebiete', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_createspatialindex_einzugsgebiete_geom: "
SELECT CreateSpatialIndex('einzugsgebiete', 'geom');"

# Teilgebiete: Auswahl von Objekten in verschiedenen Tabellen für verschiedene 
# Aufgaben, z. B. automatische Verknüpfung von befestigten Flächen und direkten 
# Einleitungen.
database_create_teilgebiete: "
CREATE TABLE teilgebiete (
    pk INTEGER PRIMARY KEY,
    tgnam TEXT,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_teilgebiete_geom: "
SELECT AddGeometryColumn('teilgebiete', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_createspatialindex_teilgebiete_geom: "
SELECT CreateSpatialIndex('teilgebiete', 'geom');"

database_create_flaechen: "
CREATE TABLE flaechen (
    pk INTEGER PRIMARY KEY,
    flnam TEXT,
    haltnam TEXT,                           /* join haltungen.haltnam */
    schnam TEXT,                            /* join schaechte.schnam */
    neigkl INTEGER DEFAULT 1,               /* Neigungsklasse (1-4) */
    neigung REAL,                           /* absolute Neigung (%) */
    teilgebiet TEXT,                        /* join teilgebiet.tgnam */
    regenschreiber TEXT,
    abflussparameter TEXT,                  /* join abflussparameter.apnam */
    aufteilen INTEGER DEFAULT 0,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_flaechen_geom: "
SELECT AddGeometryColumn('flaechen', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_createspatialindex_flaechen_geom: "
SELECT CreateSpatialIndex('flaechen', 'geom');"

# Anbindung Flächen
# Die Tabelle linkfl verwaltet die Anbindung von Flächen an Haltungen. Diese Anbindung
# wird ausschließlich grafisch verwaltet und beim Export direkt verwendet.
# Flächen, bei denen das Attribut "aufteilen" den Wert 'ja' hat, werden mit dem
# Werkzeug "QKan_Link_Flaechen" mit allen durch die Verschneidung mit tezg entstehenden
# Anteilen zugeordnet.
database_create_linkfl: "
CREATE TABLE linkfl (
    pk INTEGER PRIMARY KEY,
    flnam TEXT,
    haltnam TEXT,               /* join haltungen.haltnam */
    schnam TEXT,                /* join schaechte.schnam */
    tezgnam TEXT,               /* join tezg.flnam */
    teilgebiet TEXT,            /* join teilgebiet.tgnam */
    abflusstyp TEXT,            /* JOIN abflusstypen.abflusstyp */
    speicherzahl INTEGER,       /* HE8 AnzahlSpeicher */
    speicherkonst REAL,         /* HE8 Speicherkonstante (Typ 0) */
    fliesszeitkanal REAL,       /* HE8 LaengsteFliesszeitKanal (Typ 1) */
    fliesszeitflaeche REAL      /* HE8 FliesszeitOberflaeche (Typ 1) oder */
                                /* Schwerpunktlaufzeit (Typ 2) */
);"

database_add_linkfl_geom: "
SELECT AddGeometryColumn('linkfl', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_add_linkfl_gbuf: "
SELECT AddGeometryColumn('linkfl', 'gbuf', :epsg, 'MULTIPOLYGON', 2);"

database_add_linkfl_glink: "
SELECT AddGeometryColumn('linkfl', 'glink', :epsg, 'LINESTRING', 2);"

database_createspatialindex_linkfl_geom: "
SELECT CreateSpatialIndex('linkfl', 'geom');"

database_createspatialindex_linkfl_gbuf: "
SELECT CreateSpatialIndex('linkfl', 'gbuf');"

database_createspatialindex_linkfl_glink: "
SELECT CreateSpatialIndex('linkfl', 'glink');"

# Anbindung Direkteinleitungen:
# Die Tabelle linksw verwaltet die Anbindung von Gebäuden an Haltungen. Diese Anbindung
# wird anschließend in das Feld haltnam eingetragen. Der Export erfolgt allerdings anhand
# der grafischen Verknüpfungen dieser Tabelle.
database_create_linksw: "
CREATE TABLE linksw (
    pk INTEGER PRIMARY KEY,
    elnam TEXT,
    haltnam TEXT,               /* join haltungen.haltnam */
    schnam TEXT,                /* join schaechte.schnam */
    teilgebiet TEXT);"

database_add_linksw_geom: "
SELECT AddGeometryColumn('linksw', 'geom',  :epsg, 'POLYGON',      2);"

database_add_linksw_gbuf: "
SELECT AddGeometryColumn('linksw', 'gbuf',  :epsg, 'MULTIPOLYGON', 2);"

database_add_linksw_glink: "
SELECT AddGeometryColumn('linksw', 'glink', :epsg, 'LINESTRING',   2);"

database_createspatialindex_linksw_geom: "
SELECT CreateSpatialIndex('linksw', 'geom');"

database_createspatialindex_linksw_gbuf: "
SELECT CreateSpatialIndex('linksw', 'gbuf');"

database_createspatialindex_linksw_glink: "
SELECT CreateSpatialIndex('linksw', 'glink');"

database_create_tezg: "
CREATE TABLE tezg (
    pk INTEGER PRIMARY KEY,
    flnam TEXT,
    haltnam TEXT,               /* join haltungen.haltnam */
    schnam TEXT,                /* join schaechte.schnam */
    neigkl INTEGER DEFAULT 1,   /* Werte [1-5], als Vorgabe fuer automatisch erzeugte unbef Flaechen */
    neigung REAL,               /* absolute Neigung (%) */
    befgrad REAL,               /* (-) Befestigungsgrad absolut, nur optional fuer SWMM und HE6 */
    schwerpunktlaufzeit REAL,   /* nur, wenn nur Haltungsflächen aber keine Flächen eingelesen werden */
    regenschreiber TEXT,        /* Regenschreiber beziehen sich auf Zieldaten */
    teilgebiet TEXT,            /* join teilgebiet.tgnam */
    abflussparameter TEXT,      /* als Vorgabe fuer automatisch erzeugte unbef Flaechen */
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_tezg_geom: "
SELECT AddGeometryColumn('tezg', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_createspatialindex_tezg_geom: "
SELECT CreateSpatialIndex('tezg', 'geom');"

# Direkte Einleitungen:
# Erfasst alle Direkteinleitungen mit festem SW-Zufluss (m³/a)
# Die Zuordnung zum Teilgebiet dient nur der Auswahl
database_create_einleit: "
CREATE TABLE einleit (
    pk INTEGER PRIMARY KEY,
    elnam TEXT,
    haltnam TEXT,               /* join haltungen.haltnam */
    schnam TEXT,                /* join schaechte.schnam */
    teilgebiet TEXT,            /* join teilgebiet.tgnam  */
    zufluss REAL,               /* Zufluss (l/s) */
    ew REAL,                    /* Einwohner */
    einzugsgebiet TEXT,         /* join einzugsgebiete.tgnam */
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_einleit_geom: "
SELECT AddGeometryColumn('einleit', 'geom', :epsg, 'POINT',2);"

database_createspatialindex_einleit_geom: "
SELECT CreateSpatialIndex('einleit', 'geom');"

# Einleitungen aus Aussengebieten 
# Erfasst alle Außengebiete
# Die Zuordnung zum Teilgebiet dient nur der Auswahl
database_create_aussengebiete: "
CREATE TABLE aussengebiete (
    pk INTEGER PRIMARY KEY, 
    gebnam TEXT, 
    schnam TEXT,                /* join schaechte.schnam  */
    hoeheob REAL, 
    hoeheun REAL, 
    fliessweg REAL, 
    basisabfluss REAL, 
    cn REAL, 
    regenschreiber TEXT, 
    teilgebiet TEXT,            /* join teilgebiet.tgnam  */
    kommentar TEXT, 
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_aussengebiete_geom: "
SELECT AddGeometryColumn('aussengebiete', 'geom', :epsg, 'MULTIPOLYGON',2);"

database_createspatialindex_aussengebiete_geom: "
SELECT CreateSpatialIndex('aussengebiete', 'geom');"

# Anbindung Aussengebiete 
# Die Tabelle linkageb verwaltet die Anbindung von Aussengebieten an Schächte. Diese Anbindung
# wird anschließend in das Feld schnam eingetragen. Der Export erfolgt allerdings anhand
# der grafischen Verknüpfungen dieser Tabelle.
database_create_linkageb: "
CREATE TABLE linkageb (
    pk INTEGER PRIMARY KEY,
    gebnam TEXT,
    schnam TEXT);"

database_add_linkageb_glink: "
SELECT AddGeometryColumn('linkageb', 'glink', :epsg, 'LINESTRING', 2);"

database_createspatialindex_linkageb_glink: "
SELECT CreateSpatialIndex('linkageb', 'glink');"

# Hilfstabelle für den Flächen-Export
database_create_flaechen_he8: "
CREATE TABLE IF NOT EXISTS flaechen_he8 (
    pk INTEGER PRIMARY KEY,
    Name TEXT, 
    Haltung TEXT, 
    Groesse REAL, 
    Regenschreiber TEXT, 
    Flaechentyp INTEGER, 
    BerechnungSpeicherkonstante INTEGER, 
    Typ INTEGER, 
    AnzahlSpeicher INTEGER, 
    Speicherkonstante REAL, 
    Schwerpunktlaufzeit REAL, 
    FliesszeitOberflaeche REAL, 
    LaengsteFliesszeitKanal REAL, 
    Parametersatz TEXT, 
    Neigungsklasse INTEGER, 
    ZuordnUnabhEZG INTEGER,
    IstPolygonalflaeche SMALLINT, 
    ZuordnungGesperrt SMALLINT, 
    LastModified TEXT DEFAULT CURRENT_TIMESTAMP, 
    Kommentar TEXT);"

database_add_flaechen_he8_geometry: "
SELECT AddGeometryColumn('flaechen_he8', 'Geometry', -1,'MULTIPOLYGON',2);"

database_createspatialindex_flaechen_he8_geometry: "
SELECT CreateSpatialIndex('flaechen_he8', 'Geometry');"

database_create_simulationsstatus: "
CREATE TABLE simulationsstatus (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT,
    kuerzel TEXT,
    he_nr INTEGER,                      /* HYSTEM-EXTRAN */
    mu_nr INTEGER,                      /* Mike+ */
    kp_nr INTEGER,                      /* DYNA / Kanal++ */
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    kommentar TEXT);"

database_insert_simulationsstatus: "
INSERT INTO simulationsstatus (
bezeichnung, kuerzel, he_nr, mu_nr, kp_nr, kommentar)
VALUES
    ('in Betrieb',     'B',    1,    1,    0, 'QKan-Standard'),
    ('außer Betrieb',  'AB',   4, NULL,    3, 'QKan-Standard'),
    ('geplant',        'P',    2, NULL,    1, 'QKan-Standard'),
    ('stillgelegt',    'N', NULL, NULL,    4, 'QKan-Standard'),
    ('verdämmert',     'V',    5, NULL, NULL, 'QKan-Standard'),
    ('fiktiv',         'F',    3, NULL,    2, 'QKan-Standard'),
    ('rückgebaut',     'P', NULL, NULL,    6, 'QKan-Standard');"

database_create_material: "
CREATE TABLE IF NOT EXISTS material (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT,
    kuerzel TEXT,
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    kommentar TEXT);"

database_insert_material: "
INSERT INTO material (
bezeichnung, kuerzel, m150, m145, isybau, kommentar)
VALUES
    ('Asbestzement', 'AZ', 'AZ', '7', 'AZ', NULL),
    ('Beton', 'B', 'B', '2', 'B', NULL),
    ('Bitumen', 'BIT', 'BIT', NULL, NULL, NULL),
    ('Betonsegmente', 'BS', 'BS', NULL, 'BS', NULL),
    ('Betonsegmente kunststoffmodifiziert', 'BSK', 'BSK', NULL, NULL, NULL),
    ('Bitumen', 'BT', 'BT', NULL, NULL, NULL),
    ('Edelstahl', 'CN', 'CN', '22', NULL, NULL),
    ('Nichtidentifiziertes Metall (z. B. Eisen und Stahl)', 'EIS', 'EIS', NULL, 'EIS', NULL),
    ('Epoxydharz', 'EPX', 'EPX', NULL, NULL, NULL),
    ('Epoxydharz mit Synthesefaser', 'EPSF', 'EPSF', NULL, NULL, NULL),
    ('Faserzement', 'FZ', 'FZ', '6', 'FZ', NULL),
    ('Glasfaserverstärkter Kunststoff', 'GFK', 'GFK', '51', 'GFK', NULL),
    ('Grauguß', 'GG', 'GG', '4', 'GG', NULL),
    ('Duktiles Gußeisen', 'GGG', 'GGG', '5', 'GGG', NULL),
    ('Nichtidentifizierter Kunststoff', 'KST', 'KST', '50', 'KST', NULL),
    ('Mauerwerk', 'MA', 'MA', '3', 'MA', NULL),
    ('Ortbeton', 'OB', 'OB', NULL, 'OB', NULL),
    ('Polymerbeton', 'PC', 'PC', NULL, 'PC', NULL),
    ('Polymermodifizierter Zementbeton', 'PCC', 'PCC', NULL, 'PCC', NULL),
    ('Polyethylen', 'PE', 'PE', '52', 'PE', NULL),
    ('Polyesterharz', 'PH', 'PH', NULL, 'PH', NULL),
    ('Polyesterharzbeton', 'PHB', 'PHB', NULL, 'PHB', NULL),
    ('Polypropylen', 'PP', 'PP', '54', 'PP', NULL),
    ('Polyurethanharz', 'PUR', 'PUR', NULL, NULL, NULL),
    ('Polyvinylchlorid modifiziert', 'PVCM', 'PVCM', NULL, NULL, NULL),
    ('Polyvinylchlorid hart', 'PVCU', 'PVCU', NULL, 'PVCU', NULL),
    ('Stahlfaserbeton', 'SFB', 'SFB', NULL, 'SFB', NULL),
    ('Spannbeton', 'SPB', 'SPB', '12', 'SPB', NULL),
    ('Stahlbeton', 'SB', 'SB', '13', 'SB', NULL),
    ('Stahl', 'ST', 'ST', '21', 'ST', NULL),
    ('Steinzeug', 'STZ', 'STZ', '1', 'STZ', NULL),
    ('Spritzbeton', 'SZB', 'SZB', '14', 'SZB', NULL),
    ('Spritzbeton kunststoffmodifiziert', 'SZBK', 'SZBK', NULL, NULL, NULL),
    ('Teerfaser', 'TF', 'TF', NULL, NULL, NULL),
    ('Ungesättigtes Polyesterharz mit Glasfaser', 'UPGF', 'UPGF', NULL, NULL, NULL),
    ('Ungesättigtes Polyesterharz mit Synthesefaser', 'UPSF', 'UPSF', NULL, NULL, NULL),
    ('Vinylesterharz mit Synthesefaser', 'VEGF', 'VEGF', NULL, NULL, NULL),
    ('Vinylesterharz mit Glasfaser', 'VESF', 'VESF', NULL, NULL, NULL),
    ('Verbundrohr Beton-/StahlbetonKun', 'VBK', 'VBK', NULL, NULL, NULL),
    ('Verbundrohr Beton-/Stahlbeton Steinzeug', 'VBS', 'VBS', NULL, NULL, NULL),
    ('Nichtidentifizierter Werkstoff', 'W', 'W', NULL, NULL, NULL),
    ('Wickelrohr (PEHD)', 'WPE', 'WPE', NULL, NULL, NULL),
    ('Wickelrohr (PVCU)', 'WPVC', 'WPVC', NULL, NULL, NULL),
    ('Zementmörtel', 'ZM', 'ZM', NULL, NULL, NULL),
    ('Ziegelwerk', 'ZG', 'ZG', NULL, 'ZG', NULL);"

database_create_auslasstypen: "
CREATE TABLE auslasstypen (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT,
    he_nr INTEGER,
    mu_nr INTEGER,
    kp_nr INTEGER);"

database_insert_auslasstypen: "
INSERT INTO auslasstypen (
bezeichnung, he_nr, mu_nr, kp_nr)
VALUES ('frei', 0, NULL, NULL),
       ('normal', 1, NULL, NULL),
       ('konstant', 2, NULL, NULL),
       ('Tide', 3, NULL, NULL),
       ('Zeitreihe', 4, NULL, NULL);"

database_create_abflussparameter: "
CREATE TABLE abflussparameter (
    pk INTEGER PRIMARY KEY, 
    apnam TEXT, 
    anfangsabflussbeiwert REAL, 
    endabflussbeiwert REAL, 
    benetzungsverlust REAL, 
    muldenverlust REAL, 
    benetzung_startwert REAL, 
    mulden_startwert REAL, 
    rauheit_kst REAL,                       /* Rauheit Stricklerbeiwert = 1/n */
    pctZero REAL,                           /* SWMM % Zero-Imperv */
    bodenklasse TEXT,                       /* impervious = NULL, pervious = JOIN TO bodenklasse.bknam */
    flaechentyp TEXT,                       /* JOIN TO flaechentypen.bezeichnung */
    kommentar TEXT, 
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_create_flaechentypen: "
CREATE TABLE IF NOT EXISTS flaechentypen (
    pk INTEGER PRIMARY KEY,
    bezeichnung TEXT,
    he_nr INTEGER);"

database_insert_flaechentypen: "
INSERT INTO flaechentypen (
bezeichnung, he_nr)
Values 
    ('Gebäude', 0),
    ('Straße', 1),
    ('Grünfläche', 2),
    ('Gewässer', 3);"

database_create_bodenklassen: "
CREATE TABLE bodenklassen (
    pk INTEGER PRIMARY KEY, 
    bknam TEXT, 
    infiltrationsrateanfang REAL,               /* (mm/min) */
    infiltrationsrateende REAL,                 /* (mm/min) */
    infiltrationsratestart REAL,                /* (mm/min) */
    rueckgangskonstante REAL,                   /* (1/d) */
    regenerationskonstante REAL,                /* (1/d) */
    saettigungswassergehalt REAL,               /* (mm) */
    kommentar TEXT, 
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_create_abflusstypen: "
CREATE TABLE abflusstypen (
    pk INTEGER PRIMARY KEY, 
    abflusstyp TEXT,
    he_nr INTEGER,              /* JOIN he.Flaeche.BerechnungSpeicherkonstante */
    kp_nr INTEGER);"

database_insert_abflusstypen: "
INSERT INTO abflusstypen (
abflusstyp, he_nr, kp_nr)
Values 
    ('Speicherkaskade', 0, 0),
    ('Fliesszeiten', 1, 1),
    ('Schwerpunktlaufzeit', 2, 2);"

database_create_knotentypen: "
CREATE TABLE knotentypen (
    pk INTEGER PRIMARY KEY, 
    knotentyp TEXT);"

database_insert_knotentypen: "
INSERT INTO knotentypen (
knotentyp)
Values
    ('Anfangsschacht'),
    ('Einzelschacht'),
    ('Endschacht'),
    ('Hochpunkt'),
    ('Normalschacht'),
    ('Tiefpunkt'),
    ('Verzweigung'),
    ('Fliesszeiten');"

database_create_schachttypen: "
CREATE TABLE schachttypen (
    pk INTEGER PRIMARY KEY, 
    schachttyp TEXT);"

database_insert_schachttypen: "
INSERT INTO schachttypen (
schachttyp)
Values
    ('Auslass'),
    ('Schacht'),
    ('Speicher');"

database_create_eigentum: "
CREATE TABLE eigentum (
    pk INTEGER PRIMARY KEY,
    name TEXT, 
    kommentar TEXT);"

# Hilfstabelle für den DYNA-Export
# TODO: als temporäre Tabelle in das Export-Modul verschieben
database_create_dynahal: "
CREATE TABLE IF NOT EXISTS dynahal (
    pk INTEGER PRIMARY KEY,
    haltnam TEXT,
    schoben TEXT,                                   /* join schaechte.schnam */
    schunten TEXT,                                  /* join schaechte.schnam */
    teilgebiet TEXT,                                /* join teilgebiet.tgnam */
    kanalnummer TEXT,
    haltungsnummer TEXT,
    anzobob INTEGER,
    anzobun INTEGER,
    anzunun INTEGER,
    anzunob INTEGER);"

# Tabelle Gruppen:
# Bearbeitungen, die auf Auswahlen basieren, verwenden ausschließlich die
# Tabelle "Teilgebiete". Diese Zuordnung ist sozusagen aktiv, im Gegensatz
# zu inaktiven Zuordnungen, die in der Tabelle "gruppen" gespeichert werden.
# Mit einem plugin "Zuordnung zu Teilgebieten" können gespeicherte
# Zuordnungen gespeichert und geladen werden. Dabei werden die
# Zuordnungen für folgende Tabellen verwaltet:
#  - "haltungen"
#  - "schaechte"
#  - "flaechen"
#  - "linkfl"
#  - "linksw"
#  - "tezg"
#  - "einleit"
#  - "swgebaeude"
database_create_gruppen: "
CREATE TABLE gruppen (
    pk INTEGER PRIMARY KEY,
    pktab INTEGER,
    grnam TEXT,
    teilgebiet TEXT,                               /* join teilgebiet.tgnam */
    tabelle TEXT,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_create_profile: "
CREATE TABLE profile (
    pk INTEGER PRIMARY KEY,
    profilnam TEXT,
    kuerzel TEXT,                       /* nur für Beschriftung */
    he_nr INTEGER,                      /* HYSTEM-EXTRAN */
    mu_nr INTEGER,
    kp_key TEXT,                        /* DYNA / Kanal++ */
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    kommentar TEXT
);"

database_insert_profile: "
INSERT INTO profile (
profilnam, kuerzel, he_nr, kp_key, kommentar)
VALUES
    ('Kreis', 'DN', 1, NULL, 'QKan-Standard'),
    ('Rechteck', 'RE', 2, NULL, 'QKan-Standard'),
    ('Ei (B:H = 2:3)', 'EI', 3, NULL, 'QKan-Standard'),
    ('Maul (B:H = 2:1.66)', 'MA', 4, NULL, 'QKan-Standard'),
    ('Halbschale (offen) (B:H = 2:1)', 'HS', 5, NULL, 'QKan-Standard'),
    ('Kreis gestreckt (B:H=2:2.5)', NULL, 6, NULL, 'QKan-Standard'),
    ('Kreis überhöht (B:H=2:3)', NULL, 7, NULL, 'QKan-Standard'),
    ('Ei überhöht (B:H=2:3.5)', NULL, 8, NULL, 'QKan-Standard'),
    ('Ei breit (B:H=2:2.5)', NULL, 9, NULL, 'QKan-Standard'),
    ('Ei gedrückt (B:H=2:2)', NULL, 10, NULL, 'QKan-Standard'),
    ('Drachen (B:H=2:2)', NULL, 11, NULL, 'QKan-Standard'),
    ('Maul (DIN) (B:H=2:1.5)', NULL, 12, NULL, 'QKan-Standard'),
    ('Maul überhöht (B:H=2:2)', NULL, 13, NULL, 'QKan-Standard'),
    ('Maul gedrückt (B:H=2:1.25)', NULL, 14, NULL, 'QKan-Standard'),
    ('Maul gestreckt (B:H=2:1.75)', NULL, 15, NULL, 'QKan-Standard'),
    ('Maul gestaucht (B:H=2:1)', NULL, 16, NULL, 'QKan-Standard'),
    ('Haube (B:H=2:2.5)', 'BO', 17, NULL, 'QKan-Standard'),
    ('Parabel (B:H=2:2)', NULL, 18, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter Sohle (B:H=2:1)', NULL, 19, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter Sohle (B:H=1:1)', NULL, 20, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter Sohle (B:H=1:2)', NULL, 21, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=2:1,b=0.2B)', NULL, 22, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=1:1,b=0.2B)', NULL, 23, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=1:2,b=0.2B)', NULL, 24, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=2:1,b=0.4B)', NULL, 25, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=1:1,b=0.4B)', NULL, 26, NULL, 'QKan-Standard'),
    ('Rechteck mit geneigter und horizontaler Sohle (B:H=1:2,b=0.4B)', NULL, 27, NULL, 'QKan-Standard'),
    ('Sonderprofil', 68, 2, NULL, 'QKan-Standard'),
    ('Gerinne', 'RI', 69, NULL, 'QKan-Standard'),
    ('Trapez (offen)', 'TR', 900, NULL, 'QKan-Standard'),
    ('Rechteck offen', NULL, NULL, NULL, 'QKan-Standard'),
    ('Doppeltrapez (offen)', NULL, 901, NULL, 'QKan-Standard'),
    ('Offener Graben', 'GR', NULL, NULL, 'QKan-Standard'),
    ('Oval', 'OV', NULL, NULL, 'QKan-Standard')
"

database_create_entwaesserungsarten: "
CREATE TABLE entwaesserungsarten (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT,                   /* eindeutige QKan-Bezeichnung  */
    kuerzel TEXT,                       /* nur für Beschriftung */
    he_nr INTEGER,                      /* HYSTEM-EXTRAN */
    kp_nr INTEGER,                      /* DYNA / Kanal++ */
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    bemerkung TEXT
);"

database_insert_entwaesserungsarten: "
INSERT INTO entwaesserungsarten (
bezeichnung, kuerzel, he_nr, kp_nr, bemerkung)
VALUES
    ('Regenwasser', 'R', 1, 2, 'QKan-Standard'),
    ('Schmutzwasser', 'S', 2, 1, 'QKan-Standard'),
    ('Mischwasser', 'M', 0, 0, 'QKan-Standard'),
    ('Rinnen/Gräben', 'GR', NULL, NULL, 'QKan-Standard'),
    ('stillgelegt', 'X', NULL, NULL, 'QKan-Standard'),
    ('sonstige', 'U', NULL, NULL, 'QKan-Standard')
"

database_create_haltungstypen: "
CREATE TABLE haltungstypen(
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT, 
    bemerkung TEXT);"

database_insert_haltungstypen: "
INSERT INTO haltungstypen (
bezeichnung, bemerkung)
VALUES
    ('Haltung', NULL),
    ('Drossel', 'HYSTEM-EXTRAN 8'),
    ('H-Regler', 'HYSTEM-EXTRAN 8'),
    ('Q-Regler', 'HYSTEM-EXTRAN 8'),
    ('Schieber', 'HYSTEM-EXTRAN 8'),
    ('GrundSeitenauslass', 'HYSTEM-EXTRAN 8'),
    ('Pumpe', NULL),
    ('Wehr', NULL);"

# Tabelle Untersuchungsrichtung wird nur für das Nachschlagefeld benötigt
database_create_untersuchrichtung: "
CREATE TABLE untersuchrichtung (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT, 
    kuerzel TEXT, 
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    bemerkung TEXT);"

database_insert_untersuchrichtung: "
INSERT INTO untersuchrichtung (
kuerzel, bezeichnung, bemerkung)
VALUES
    (NULL, 'in Fließrichtung', 'automatisch hinzugefügt'),
    (NULL, 'gegen Fließrichtung', 'automatisch hinzugefügt');"

database_create_wetter: "
CREATE TABLE wetter (
    pk INTEGER PRIMARY KEY, 
    kuerzel INTEGER, 
    bezeichnung TEXT, 
    isybau TEXT,                        /* BFR Abwasser */
    m150 TEXT,                          /* DWA M150 */
    m145 TEXT,                          /* DWA M145 */
    bemerkung TEXT);"

database_insert_wetter: "
INSERT INTO wetter (
kuerzel, bezeichnung, bemerkung)
VALUES
    (0, 'keine Angabe', NULL),
    (1, 'kein Niederschlag', NULL),
    (2, 'Regen', NULL),
    (3, 'Schnee- oder Eisschmelzwasser', NULL);"

database_create_bewertungsart: "
CREATE TABLE bewertungsart (
    pk INTEGER PRIMARY KEY, 
    kuerzel INTEGER, 
    bezeichnung TEXT, 
    bemerkung TEXT);"

database_insert_bewertungsart: "
INSERT INTO bewertungsart (
kuerzel, bezeichnung, bemerkung)
VALUES
    (0, 'keine Angabe', NULL),
    (1, 'ISYBAU 2006/DIN-EN 13508-2:2011', NULL),
    (2, 'ISYBAU 2001', NULL),
    (3, 'ISYBAU 1996', NULL),
    (4, 'Anderes Verfahren', NULL);"

database_create_pumpentypen: "
CREATE TABLE pumpentypen (
    pk INTEGER PRIMARY KEY, 
    bezeichnung TEXT, 
    he_nr INTEGER,
    isybau INTEGER);"

database_insert_pumpentypen: "
INSERT INTO pumpentypen (
bezeichnung, he_nr, isybau)
VALUES
    ('Offline', 1, 1),
    ('Online Schaltstufen', 2, 2),
    ('Online Kennlinie', 3, 3),
    ('Online Wasserstandsdifferenz', 4, 4),
    ('Ideal', 5, 5);"

database_create_refdata: "
CREATE TABLE refdata (
    pk INTEGER PRIMARY KEY,
    bezext TEXT,                        /* externe Bezeichnung, z. B. gem. DWA-M 150 */
    bezqkan TEXT,                       /* Standardbezeichnung in QKan */
    kuerzel TEXT,                       /* Kürzel in QKan */
    subject TEXT,                       /* Bezeichnung der QKan-Tabelle oder interner Mapping-Tabelle */
    modul TEXT,                         /* QKan-Modul (= Modulverzeichnis) */
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP
);"

# Abfragen für Plausibilitätsprüfungen
database_create_pruefsql: "
CREATE TABLE IF NOT EXISTS pruefsql (
    pk INTEGER PRIMARY KEY,
    gruppe TEXT,                        /* zur Auswahl nach Thema */
    warntext TEXT,                      /* Beschreibung der SQL-Abfrage */
    warntyp TEXT,                       /* 'Info', 'Warnung', 'Fehler' */
    warnlevel INTEGER,                  /* zur Sortierung, 1-3 = Info, 4-7 = Warnung, 8-10 = Fehler */
    sql TEXT,
    layername TEXT,                     /* Objektsuche Layername */
    attrname TEXT,                      /* Objektsuche Attribut zur Objektidentifikation, */
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

# Ergebnisse der Plausibilitätsprüfungen
database_create_pruefliste: "
CREATE TABLE IF NOT EXISTS pruefliste (
    pk INTEGER PRIMARY KEY,
    warntext TEXT,                      /* Beschreibung der SQL-Abfrage */
    warntyp TEXT,                       /* 'Info', 'Warnung', 'Fehler' */
    warnlevel INTEGER,                  /* zur Sortierung, 1-3 = Info, 4-7 = Warnung, 8-10 = Fehler */
    layername TEXT,                     /* Objektsuche Layername */
    attrname TEXT,                      /* Objektsuche Attribut zur Objektidentifikation, */
    objname TEXT,                       /* Objektsuche Objektname */
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

# Referenztabelle für Plausi Zustandsklassen
database_create_reflist_zustand: "
CREATE TABLE IF NOT EXISTS reflist_zustand (
    pk INTEGER PRIMARY KEY,
    art TEXT,
    hauptcode TEXT,
    charakterisierung1 TEXT,
    charakterisierung2 TEXT,
    bereich TEXT
);"

database_create_info: "
CREATE TABLE info (
    pk INTEGER PRIMARY KEY, 
    subject TEXT, 
    value TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_insert_info: "
INSERT INTO info (
subject, value)
VALUES ('version', ?);"

database_create_fotos: "
CREATE TABLE IF NOT EXISTS fotos (
    pk INTEGER PRIMARY KEY, 
                    name TEXT, 
                    untersuchtag TEXT,
                    objekt TEXT,
                    datei TEXT,
                    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_create_videos: "
CREATE TABLE IF NOT EXISTS videos (
    pk INTEGER PRIMARY KEY, 
                    name TEXT, 
                    untersuchtag TEXT,
                    objekt TEXT,
                    datei TEXT,
                    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_create_symbole: "
CREATE TABLE IF NOT EXISTS symbole (
    pk INTEGER PRIMARY KEY,
    bezeichnung TEXT,
    art TEXT,               /* QGIS-Referenz Thematische Karte zur Auswahl des Symbols */
    link TEXT,
    gruppe TEXT,
    kommentar TEXT,
    createdat TEXT DEFAULT CURRENT_TIMESTAMP);"

database_add_symbole_geom: "
SELECT AddGeometryColumn('symbole', 'geom', :epsg, 'POINT', 2);"

database_createspatialindex_symbole_geom: "
SELECT CreateSpatialIndex('symbole', 'geom');"

database_create_symbolkatalog: "
CREATE TABLE IF NOT EXISTS symbolkatalog (
    pk INTEGER PRIMARY KEY,
    bezeichnung TEXT,
    gruppe TEXT,                            /* zur Aufteilung auf verschiedene Layer */
    kommentar TEXT);"

database_insert_symbolkatalog: "
INSERT INTO symbolkatalog (bezeichnung, gruppe, kommentar) VALUES
('KA gepl', 'ABK NRW', NULL),
('KA vorh', 'ABK NRW', NULL),
('KKA', 'ABK NRW', NULL),
('NW Einl in Gew gepl', 'ABK NRW', NULL),
('NW Einl in Gew vorh', 'ABK NRW', NULL),
('NW Einl in GW gepl', 'ABK NRW', NULL),
('NW Einl in GW vorh', 'ABK NRW', NULL),
('PW gepl', 'ABK NRW', NULL),
('PW vorh', 'ABK NRW', NULL),
('RRB gepl', 'ABK NRW', NULL),
('RRB vorh', 'ABK NRW', NULL),
('RÜ gepl', 'ABK NRW', NULL),
('RÜ vorh', 'ABK NRW', NULL),
('RÜB gepl', 'ABK NRW', NULL),
('RÜB vorh', 'ABK NRW', NULL),
('SW Einl in Gew gepl', 'ABK NRW', NULL),
('SW Einl in Gew vorh', 'ABK NRW', NULL),
('SW Einl in GW gepl', 'ABK NRW', NULL),
('SW Einl in GW vorh', 'ABK NRW', NULL),
('Übergabe gepl', 'ABK NRW', NULL),
('Übergabe vorh', 'ABK NRW', NULL),
('Übernahme gepl', 'ABK NRW', NULL),
('Übernahme vorh', 'ABK NRW', NULL),
('VSA gepl', 'ABK NRW', NULL),
('VSA vorh', 'ABK NRW', NULL),
('wegfallend', 'ABK NRW', NULL),
('Abflusslose Grube', 'Entwässerung', NULL),
('Be-/Entlüftungsschacht', 'Entwässerung', NULL),
('Molchschacht', 'Entwässerung', NULL),
('Strassenablauf', 'Entwässerung', NULL),
('Vakuumstation', 'Entwässerung', NULL);"

database_createview_untersuchdat_aktuell: "
CREATE VIEW v_untersuchdat_hal_last AS
WITH um AS (
    SELECT untersuchhal, schoben, schunten, max(untersuchtag) AS letzter_untersuchtag
    FROM untersuchdat_haltung
    GROUP BY untersuchhal, schoben, schunten)
SELECT uh.*
FROM untersuchdat_haltung AS uh
JOIN um USING(untersuchhal, schoben, schunten);"

database_getepsg: "
SELECT srid
FROM geom_cols_ref_sys
WHERE Lower(f_table_name) = Lower('haltungen')
AND Lower(f_geometry_column) = Lower('geom');"

database_altertable_addgeometrycolumn: "
SELECT AddGeometryColumn(?, ?, ?, ?, ?);"

database_altertable_discardgeometrycolumn: "
SELECT DiscardGeometryColumn(?, ?);"

database_altertable_createspatialindex: "
SELECT CreateSpatialIndex(?, ?);"

database_insertdata_schaechte: "
INSERT INTO schaechte (
    schnam, sohlhoehe, deckelhoehe, 
    durchm, 
    druckdicht,
    ueberstauflaeche, 
    entwart, strasse, baujahr, teilgebiet, 
    knotentyp, auslasstyp, schachttyp,
    simstatus, material,
    kommentar, createdat, 
    geop, geom)
VALUES (
    :schnam, :sohlhoehe, :deckelhoehe,
    CASE WHEN :durchm > 200 THEN :durchm/1000. ELSE :durchm END, 
    :druckdicht, coalesce(:ueberstauflaeche, 0), 
    coalesce(:entwart, 'Regenwasser'), :strasse, :baujahr, :teilgebiet, 
    :knotentyp, :auslasstyp, coalesce(:schachttyp, 'Schacht'), 
    coalesce(:simstatus, 'vorhanden'), :material,
    :kommentar, coalesce(:createdat, CURRENT_TIMESTAMP),
    CASE WHEN :geop IS NULL
        THEN MakePoint(:xsch, :ysch, :epsg)
        ELSE GeomFromWKB(:geop, :epsg)
    END,
    CASE WHEN :geom IS NULL
        THEN CastToMultiLineString(MakeCircle(:xsch,:ysch,coalesce(iif(:durchm>200.0,:durchm/1000.0,:durchm), 1.0)/2.0, :epsg))
        ELSE GeomFromWKB(:geom, :epsg)
    END);"

database_insertdata_haltungen: "
INSERT INTO haltungen
  (haltnam, baujahr, schoben, schunten,
   hoehe, breite, laenge, aussendurchmesser,
   sohleoben, sohleunten, 
   teilgebiet, profilnam, 
   entwart, strasse, material, profilauskleidung, innenmaterial, ks, haltungstyp,
   simstatus, kommentar, createdat,  
   geom)
SELECT 
  :haltnam, :baujahr, :schoben, :schunten,
  CASE WHEN :hoehe > 20 THEN :hoehe ELSE :hoehe*1000. END,
  CASE WHEN :breite > 20 THEN :breite ELSE :breite*1000. END,
  :laenge, :aussendurchmesser,
  :sohleoben, :sohleunten,
  :teilgebiet, coalesce(:profilnam, 'Kreisquerschnitt'),
  coalesce(:entwart, 'Regenwasser'), :strasse, :material, :profilauskleidung, :innenmaterial, coalesce(:ks, 1.5), coalesce(:haltungstyp, 'Haltung'),
  coalesce(:simstatus, 'vorhanden'), :kommentar,
  coalesce(:createdat, CURRENT_TIMESTAMP),
  CASE WHEN :geom IS NULL
    THEN
      MakeLine(
        coalesce(
          (SELECT geop FROM schaechte WHERE schnam = :schoben LIMIT 1),
          MakePoint(:xschob, :yschob, :epsg)
        ),
        coalesce(
          (SELECT geop FROM schaechte WHERE schnam = :schunten LIMIT 1),
          MakePoint(:xschun, :yschun, :epsg)
        )
      )
    ELSE GeomFromWKB(:geom, :epsg)
  END;"

database_insertdata_haltungen_untersucht: "
INSERT INTO haltungen_untersucht
  (haltnam, bezugspunkt, untersuchrichtung, schoben, schunten,
   hoehe, breite, laenge,
   kommentar, createdat, baujahr,  
   geom, untersuchtag, untersucher, wetter, auftragsbezeichnung, strasse, bewertungsart,
   bewertungstag, datenart, max_ZD, max_ZB, max_ZS)
SELECT 
  :haltnam, :bezugspunkt, :untersuchrichtung, :schoben, :schunten, 
  CASE WHEN :hoehe > 20 THEN :hoehe ELSE :hoehe*1000. END, 
  CASE WHEN :breite > 20 THEN :breite ELSE :breite*1000. END,
  :laenge, :kommentar, 
  coalesce(:createdat, CURRENT_TIMESTAMP), :baujahr,
  CASE WHEN :geom IS NULL
    THEN
      MakeLine(
        coalesce(
          MakePoint(:xschob, :yschob, :epsg),
          suo.geop,
          so.geop
        ), 
        coalesce(
          MakePoint(:xschun, :yschun, :epsg),
          suu.geop,
          su.geop
        )
      )
    ELSE GeomFromWKB(:geom, :epsg)
  END,
  :untersuchtag, :untersucher, :wetter, :auftragsbezeichnung, :strasse, :bewertungsart,
  :bewertungstag, :datenart, :max_ZD, :max_ZB, :max_ZS
FROM
  (SELECT :schoben AS schoben, :schunten AS schunten) AS ha
  LEFT JOIN schaechte_untersucht AS suo ON suo.schnam = ha.schoben
  LEFT JOIN schaechte_untersucht AS suu ON suu.schnam = ha.schunten
  LEFT JOIN schaechte AS so ON so.schnam = ha.schoben
  LEFT JOIN schaechte AS su ON su.schnam = ha.schunten;"

database_insertdata_untersuchdat_haltung: "
INSERT INTO untersuchdat_haltung
  (untersuchhal, schoben, schunten, id, untersuchtag, bandnr, videozaehler, 
    inspektionslaenge, station, timecode, video_offset, kuerzel, langtext, charakt1, charakt2, 
    quantnr1, quantnr2, streckenschaden, streckenschaden_lfdnr, pos_von, pos_bis, foto_dateiname, 
    film_dateiname, ordner_bild, ordner_video, ZD, ZB, ZS, createdat)
SELECT
  :untersuchhal, :schoben, :schunten, :id, :untersuchtag, :bandnr, :videozaehler, 
  :inspektionslaenge , :station, :timecode, :video_offset, :kuerzel, :langtext, :charakt1, :charakt2, 
  :quantnr1, :quantnr2, :streckenschaden, :streckenschaden_lfdnr, :pos_von, :pos_bis, 
  :foto_dateiname, :film_dateiname, :ordner_bild, :ordner_video,
  :ZD, :ZB, :ZS, coalesce(:createdat, CURRENT_TIMESTAMP);"

database_insertdata_anschlussleitungen: "
INSERT INTO anschlussleitungen
  (leitnam, schoben, schunten,
   hoehe, breite, laenge, aussendurchmesser,
   sohleoben, sohleunten, baujahr, haltnam, teilgebiet, 
   urstation, ursprung, anschlusstyp, lageanschluss,
   strasse, profilnam,
   entwart, material, profilauskleidung, innenmaterial, ks,
   simstatus, kommentar, createdat,
   geom)
VALUES( 
  :leitnam, :schoben, :schunten, 
  CASE WHEN :hoehe > 20 THEN :hoehe ELSE :hoehe*1000. END, 
  CASE WHEN :breite > 20 THEN :breite ELSE :breite*1000. END,
  :laenge, :aussendurchmesser,
  :sohleoben, :sohleunten, :baujahr, :haltnam,
  :teilgebiet, 
  :urstation, :ursprung, :anschlusstyp, :lageanschluss,
  :strasse, :profilnam,
  coalesce(:entwart, 'Regenwasser'), :material, :profilauskleidung, :innenmaterial, coalesce(:ks, 1.5), 
  coalesce(:simstatus, 'vorhanden'), :kommentar, 
  coalesce(:createdat, CURRENT_TIMESTAMP), 
  CASE WHEN :geom IS NULL
      THEN MakeLine(
          MakePoint(:xschob, :yschob, :epsg), 
          MakePoint(:xschun, :yschun, :epsg))
      ELSE GeomFromWKB(:geom, :epsg)
  END);"

database_insertdata_anschlussleitungen_untersucht: "
INSERT INTO anschlussleitungen_untersucht
  (leitnam, bezugspunkt, untersuchrichtung, schoben, schunten,
   hoehe, breite, laenge,
   kommentar, createdat, baujahr,  
   geom, untersuchtag, untersucher, wetter, auftragsbezeichnung, strasse, bewertungsart, bewertungstag, datenart, max_ZD, max_ZB, max_ZS)
SELECT 
  :leitnam, :bezugspunkt, :untersuchrichtung, :schoben, :schunten, 
  CASE WHEN :hoehe > 20 THEN :hoehe ELSE :hoehe*1000. END, 
  CASE WHEN :breite > 20 THEN :breite ELSE :breite*1000. END,
  :laenge, :kommentar, 
  coalesce(:createdat, CURRENT_TIMESTAMP), :baujahr,
  CASE WHEN :geom IS NULL
    THEN
      MakeLine(
        coalesce(
          MakePoint(:xschob, :yschob, :epsg),
          suo.geop,
          so.geop
        ), 
        coalesce(
          MakePoint(:xschun, :yschun, :epsg),
          suu.geop,
          su.geop
        )
      )
    ELSE GeomFromWKB(:geom, :epsg)
  END, 
  :untersuchtag, :untersucher, :wetter, :auftragsbezeichnung, :strasse, :bewertungsart,
  :bewertungstag, :datenart, :max_ZD, :max_ZB, :max_ZS
FROM
  (SELECT :schoben AS schoben, :schunten AS schunten) AS ha
  LEFT JOIN schaechte_untersucht AS suo ON suo.schnam = ha.schoben
  LEFT JOIN schaechte_untersucht AS suu ON suu.schnam = ha.schunten
  LEFT JOIN schaechte AS so ON so.schnam = ha.schoben
  LEFT JOIN schaechte AS su ON su.schnam = ha.schunten;"

database_insertdata_untersuchdat_anschlussleitung: "
INSERT INTO untersuchdat_anschlussleitung
  (untersuchleit, schoben, schunten, id, untersuchtag, bandnr, videozaehler, 
    inspektionslaenge, station, timecode, video_offset, kuerzel, langtext, charakt1, charakt2, 
    quantnr1, quantnr2, streckenschaden, streckenschaden_lfdnr, pos_von, pos_bis, foto_dateiname, 
    film_dateiname, ordner_bild, ordner_video, ZD, ZB, ZS, createdat)
SELECT
  :untersuchleit, :schoben, :schunten, :id, :untersuchtag, :bandnr, :videozaehler, 
  :inspektionslaenge , :station, :timecode, :video_offset, :kuerzel, :langtext, :charakt1, :charakt2, 
  :quantnr1, :quantnr2, :streckenschaden, :streckenschaden_lfdnr, :pos_von, :pos_bis, 
  :foto_dateiname, :film_dateiname, :ordner_bild, :ordner_video,
  :ZD, :ZB, :ZS, coalesce(:createdat, CURRENT_TIMESTAMP);"

database_insertdata_anschlussschaechte: "
INSERT INTO anschlussschaechte (
    schnam, sohlhoehe, deckelhoehe, 
    durchm, 
    druckdicht,
    entwart, strasse, baujahr, teilgebiet, 
    simstatus, material,
    kommentar, createdat, 
    geom)
VALUES (
    :schnam, :sohlhoehe, :deckelhoehe,
    CASE WHEN :durchm > 200 THEN :durchm/1000. ELSE :durchm END, 
    :druckdicht, 
    coalesce(:entwart, 'Regenwasser'), :strasse, :baujahr, :teilgebiet, 
    coalesce(:simstatus, 'vorhanden'), :material,
    :kommentar, coalesce(:createdat, CURRENT_TIMESTAMP),
    CASE WHEN :geom IS NULL
        THEN MakePoint(:xsch, :ysch, :epsg)
        ELSE GeomFromWKB(:geom, :epsg)
    END);"

database_insertdata_schaechte_untersucht: "
INSERT INTO schaechte_untersucht
  (schnam, durchm, bezugspunkt, id,
   kommentar, createdat, baujahr,
   geop, untersuchtag, untersucher, 
   wetter, auftragsbezeichnung, strasse, bewertungsart, 
   bewertungstag, datenart, max_ZD, max_ZB, max_ZS)
SELECT
  :schnam,
  CASE WHEN :durchm > 200 THEN :durchm/1000. ELSE :durchm END, :bezugspunkt, :id,
  :kommentar, coalesce(:createdat, CURRENT_TIMESTAMP), :baujahr,
  CASE WHEN :geop IS NULL
    THEN
        sch.geop
    ELSE GeomFromWKB(:geop, :epsg)
  END,
  :untersuchtag, :untersucher, 
  :wetter, :auftragsbezeichnung, :strasse, :bewertungsart, 
  :bewertungstag, :datenart, 
  :max_ZD, :max_ZB, :max_ZS
FROM
  (SELECT :schnam AS schnam) AS val
  LEFT JOIN schaechte AS sch ON val.schnam = sch.schnam;"

database_insertdata_untersuchdat_schacht: "
INSERT INTO untersuchdat_schacht
  (untersuchsch, id, untersuchtag, bandnr, videozaehler, timecode, kuerzel, langtext, 
    charakt1, charakt2, quantnr1, quantnr2, 
    streckenschaden, streckenschaden_lfdnr, pos_von, pos_bis, 
    vertikale_lage, inspektionslaenge, bereich, 
    foto_dateiname, ordner_bild, film_dateiname, ordner_video,
    ZD, ZB, ZS, 
    createdat)
SELECT 
  :untersuchsch, :id, :untersuchtag, :bandnr, :videozaehler, :timecode, :kuerzel, :langtext, 
    :charakt1, :charakt2, :quantnr1, :quantnr2, 
    :streckenschaden, :streckenschaden_lfdnr, :pos_von, :pos_bis, 
    :vertikale_lage, :inspektionslaenge, :bereich, 
    :foto_dateiname, :ordner_bild, :film_dateiname, :ordner_video,
    :ZD, :ZB, :ZS, 
    coalesce(:createdat, CURRENT_TIMESTAMP)
FROM
    schaechte AS sch
    WHERE sch.schnam = :untersuchsch;"

database_insertdata_tezg: "
INSERT INTO tezg
  (flnam, regenschreiber, schnam, befgrad, neigung, 
    createdat, haltnam, neigkl, schwerpunktlaufzeit, 
    teilgebiet, abflussparameter,
    kommentar, geom)
VALUES (
:flnam, :regenschreiber, :schnam, :befgrad, :neigung, 
    coalesce(:createdat, CURRENT_TIMESTAMP), :haltnam, :neigkl, 
    :schwerpunktlaufzeit, :teilgebiet, 
    :abflussparameter, :kommentar,
GeomFromWKB(:geom, :epsg));"

database_insertdata_symbole: "
INSERT INTO symbole
  (bezeichnung, art, gruppe, kommentar, geom)
VALUES (
:bezeichnung, :art, :gruppe, :kommentar,
GeomFromWKB(:geom, :epsg));"

database_insertdata_fotos: "
INSERT INTO fotos
  (name, untersuchtag, objekt, datei, createdat)
VALUES (
:name, :untersuchtag, :objekt, :datei, 
coalesce(:createdat, CURRENT_TIMESTAMP));"

database_insertdata_videos: "
INSERT INTO videos
  (name, untersuchtag, objekt, datei, createdat)
VALUES (
:name, :untersuchtag, :objekt, :datei, 
coalesce(:createdat, CURRENT_TIMESTAMP));"

database_insertdata_flaechen: "
INSERT INTO flaechen
  (flnam, haltnam, schnam, neigkl, neigung, 
  teilgebiet, regenschreiber, abflussparameter, 
  aufteilen, kommentar, createdat, 
  geom)
VALUES (
:flnam, :haltnam, :schnam, :neigkl, :neigung, 
:teilgebiet, :regenschreiber, :abflussparameter, 
:aufteilen, :kommentar, 
coalesce(:createdat, CURRENT_TIMESTAMP),
GeomFromWKB(:geom, :epsg));"

database_insertdata_teilgebiete: "
INSERT INTO teilgebiete
  (tgnam, kommentar, createdat, geom)
VALUES (
    :tgnam, :kommentar, 
    coalesce(:createdat, CURRENT_TIMESTAMP),
    GeomFromWKB(:geom, :epsg));"

database_tableinfo_geometry_columns: "
SELECT f_geometry_column, geometry_type, srid, 
        coord_dimension, spatial_index_enabled
FROM geometry_columns WHERE f_table_name = ?"

database_getversion: "
SELECT value
FROM info
WHERE subject = 'version'"

database_update_info: "
UPDATE info SET value = ? WHERE subject = 'version'"

database_insertversion: "
INSERT INTO info (subject, value) Values ('version', '1.9.9');"

database_tableinfo: "
PRAGMA table_info({tabnam});"

database_foreign_key_off: "
PRAGMA foreign_keys=OFF;"

database_create_table: "
CREATE TABLE {tabnam} ({attr_text_create});"

database_create_temp_table: "
CREATE TABLE IF NOT EXISTS {tabnam}_t ({attr_text_create});"

database_delete: "
DELETE FROM {tabnam}_t"

database_transfer: "
INSERT INTO {tabnam} ({attr_text_both})
SELECT {attr_text_both}
FROM {tabnam}_t;"

# Falls Geometrietyp geändert wird, geschieht das beim Anlegen der temporären Tabelle
database_transfer_t: "
INSERT INTO {tabnam}_t ({attr_text_aim})
SELECT {attr_text_source}
FROM {tabnam};"

database_drop_table: "
DROP TABLE {tabnam};"

database_drop_table_t: "
DROP TABLE {tabnam}_t;"

database_foreign_check: "
PRAGMA foreign_key_check;"

database_foreign_on: "
PRAGMA foreign_keys=ON;"

database_insert_into: "
INSERT INTO {reftable} ({attr_name}, {attr_key}, {attr_bem})
VALUES (?, ?, ?);"

database_insert_short: "
INSERT INTO {reftable} ({attr_name}, {attr_key}, {attr_short}, {attr_bem})
VALUES (?, ?, ?, ?);"

database_get_bezeichnung: "
SELECT bezext FROM refdata
WHERE bezqkan IS NULL
  AND subject       = :subject"

database_set_bezeichnung: "
UPDATE refdata SET bezqkan = :bezqkan
WHERE bezext =  :bezext
  AND subject = :subject"

database_create_sel_haltungen: "
CREATE TABLE IF NOT EXISTS sel_haltungen (pk INTEGER PRIMARY KEY);"

database_create_sel_schaechte: "
CREATE TABLE IF NOT EXISTS sel_schaechte (pk INTEGER PRIMARY KEY);"

database_create_sel_flaechen: "
CREATE TABLE IF NOT EXISTS sel_flaechen (pk INTEGER PRIMARY KEY);"

database_insert_sel_haltungen: "
INSERT INTO sel_haltungen (pk) VALUES (:pk);"

database_insert_sel_schaechte: "
INSERT INTO sel_schaechte (pk) VALUES (:pk);"

database_insert_sel_flaechen: "
INSERT INTO sel_flaechen (pk) VALUES (:pk);"

database_clear_sel_haltungen: "
DELETE FROM sel_haltungen"

database_clear_sel_schaechte: "
DELETE FROM sel_schaechte"

database_clear_sel_flaechen: "
DELETE FROM sel_flaechen"

database_count_sel_haltungen: "
SELECT count() FROM sel_haltungen"

database_count_sel_schaechte: "
SELECT count() FROM sel_schaechte"

database_count_sel_flaechen: "
SELECT count() FROM sel_flaechen"

database_count_haltungen_all: "
SELECT count() FROM haltungen"

database_count_schaechte_all: "
SELECT count() FROM schaechte"

database_count_flaechen_all: "
SELECT count() FROM flaechen"

database_checknames: "
SELECT {attr}
    FROM {tab}
    WHERE {attr} IS NULL or trim({attr}) = ''"

database_correct_names: "
UPDATE {tab}
    SET {attr} = printf('{prefix}%d', ROWID)
    WHERE {attr} IS NULL or trim({attr}) = ''"

database_checkmultiple: "
SELECT {attr}, count(*) AS anzahl
    FROM {tab}
    GROUP BY {attr}
    HAVING anzahl > 1 OR {attr} IS NULL"

database_correct_multiple: "
WITH doppelte AS (
    SELECT {attr}, count(*) AS anzahl
    FROM {tab}
    GROUP BY {attr}
    HAVING anzahl > 1 OR {attr} IS NULL
)
UPDATE {tab}
SET {attr} = printf('{prefix}%d', ROWID)
WHERE {attr} IN (SELECT {attr} FROM doppelte);"

database_checkflaechenbilanz: "
WITH flintersect AS (
    SELECT fl.flnam AS finam, 
           CASE WHEN (fl.aufteilen <> 'ja' AND not fl.aufteilen) OR fl.aufteilen IS NULL THEN area(fl.geom) 
           ELSE area(CastToMultiPolygon(CollectionExtract(intersection(fl.geom,tg.geom),3))) 
           END AS flaeche
    FROM linkfl AS lf
    INNER JOIN flaechen AS fl
    ON lf.flnam = fl.flnam
    LEFT JOIN tezg AS tg
    ON lf.tezgnam = tg.flnam)
SELECT fa.flnam, fi.finam, sum(fi.flaeche) AS fl_int, 
       AREA(fa.geom) AS fl_ori, sum(fi.flaeche) - AREA(fa.geom) AS diff
FROM flaechen AS fa
LEFT JOIN flintersect AS fi
ON fa.flnam = fi.finam
GROUP BY fa.flnam
HAVING ABS(sum(fi.flaeche) - AREA(fa.geom)) > 2"

database_checktezgbilanz: "
WITH flintersect AS (
    SELECT tg.flnam AS finam, 
           CASE WHEN (fl.aufteilen <> 'ja' AND not fl.aufteilen) OR fl.aufteilen IS NULL THEN area(fl.geom) 
           ELSE area(CastToMultiPolygon(CollectionExtract(intersection(fl.geom,tg.geom),3))) 
           END AS flaeche
    FROM linkfl AS lf
    INNER JOIN flaechen AS fl
    ON lf.flnam = fl.flnam
    LEFT JOIN tezg AS tg
    ON lf.tezgnam = tg.flnam)
SELECT tg.flnam, fi.finam, sum(fi.flaeche) AS fl_int, 
       AREA(tg.geom) AS fl_ori, sum(fi.flaeche) - AREA(tg.geom) AS diff
FROM tezg AS tg
LEFT JOIN flintersect AS fi
ON tg.flnam = fi.finam
GROUP BY tg.flnam
HAVING ABS(sum(fi.flaeche) - AREA(tg.geom)) > 2"
