Ein Artikel, der SQL-Generierungstools erklärt

Das SQL-Generierungstool kann verwendet werden, um  die Kompatibilität von Parser  mit anderen Datenbankprodukten zu testen. Durch Parsen  der Produktionen in der YACC-  Grammatikdatei wird die entsprechende  SQL-  Anweisung generiert und die Datenbank wird dann zum Ausführen der  SQL-Anweisung verwendet , wird beurteilt, ob die Anweisung mit der Syntax anderer Datenbanken kompatibel ist.

0 1 Werkzeugnutzung

Vorverarbeitung der Grammatikdatei

Der Zweck der Vorverarbeitung besteht darin, irrelevante Inhalte in der Grammatikdatei zu entfernen und nur die Produktionen jeder Anweisung beizubehalten. Sie können die Grammatikregeln in der Grammatikdatei (ohne Aktion) über den Befehl bison -v sql.y abrufen und dann entfernen Der generierte Inhalt in der generierten Datei ist wie folgt:

Der Inhalt der generierten sql.output-Datei ist wie folgt, wir behalten nur den Abschnitt „ Syntax “ bei:

Hinweis: Für den reservierten Abschnitt „ Syntax “ muss auch dessen Seriennummer entfernt werden.

 

Für den obigen Prozess kapseln wir ihn durch das Vorverarbeitungsskript preprocess.sh, damit die verarbeiteten Dateien den Anforderungen des Tools entsprechen. Das generierte Dateiformat ist wie folgt und die Ausgabedatei .output ist die vorverarbeitete Grammatikdatei.

 

Generierung von SQL-Anweisungen

Nachdem Sie eine Syntaxdatei generiert haben, die die Bedingungen erfüllt, können Sie das Tool zum Generieren von SQL verwenden. Das Tool unterstützt die folgenden Parameter:

•-b: Gibt die erforderliche Syntaxdatei an. Die Syntaxdatei ist die Datei, die nach der Verarbeitung durch das Skript preprocess.sh generiert wird.

•-n: Geben Sie den Namen der zu generierenden Produktion an (erforderlich).

•-R: Zufällig generierter Modus, optional, Standard ist der Aufzählungsmodus

•-o: Geben Sie die Speicherdatei zum Generieren von SQL-Anweisungen an, optional, Standard ist report.csv

•-N: Begrenzen Sie die Anzahl der generierten SQL-Anweisungen, optional, standardmäßig keine Begrenzung

 

0 2 Tool-Implementierung

Dieses Tool enthält zwei Pakete: yacc_parser und sql_generator, die für die Durchführung des Token-Parsings bzw. der SQL-Generierung verantwortlich sind.

Ausdrucksmethode der Produktion

type SeqInfo struct {
    Items []string
}
type Production struct {
    Head  string    // 产生式头部
    Alter []SeqInfo     // 产生式 body
}

​​​​​​​

Token-Analyse

Die Funktion Tokenize wird verwendet, um die Zeichen in der gelesenen Grammatikdatei zu tokenisieren, und jeder Aufruf gibt ein Token zurück. Diese Funktion verarbeitet nur einfache Trennzeichen und Anführungszeichen und implementiert keinen regulären Abgleich des standardmäßigen lexikalischen Analysators.

Die Parse-Funktion ruft die Tokenize-Funktion auf und gibt jedes Mal ein Token zurück. Nach der Rückkehr stellt die Parse-Funktion basierend auf dem aktuellen Status und Token-Typ eine Reihe von Tokens in der Produktion zusammen.

 

SQL-Generierung

Es gibt zwei Modi für die SQL-Generierung:

1. Durchlaufen Sie die Hauptteilliste der angegebenen Produktion in der Produktion und enumerieren Sie sie, um SQL-Anweisungen zu generieren.

2. Wählen Sie zufällig die Hauptteilliste der angegebenen Produktion in Produktion aus und generieren Sie zufällig SQL-Anweisungen.

 

1. Aufzählung

Die Implementierung der Aufzählung besteht darin, eine verknüpfte Liste zu verwenden, um das aufzulösende Token jedes Mal vom Kopf der verknüpften Liste zu speichern und die Anzahl der Vorkommen des Tokens zu erhöhen Die Anzahl der Vorkommen des Tokens im Datensatz in jedem Unterausdruck ist größer als die angegebene Anzahl von Malen. Filtern Sie Unterausdrücke, die weiterhin abgeleitet werden können.

Andererseits werden zwei Arrays verwendet, um den Index (Auswahl) des aktuell verwendeten Unterausdrucks und den Index (max) des aktuell maximal aufzuzeichnenden Unterausdrucks aufzuzeichnen, sodass der nächste Ausdruck nach Wahl erhöht werden kann.

Wählen Sie nach dem Filtern den richtigen Unterausdruck der Produktion an der Auswahlposition aus, fügen Sie alle seine Token in den Kopf der verknüpften Liste ein und bestimmen Sie dann, ob der Kopf ein Literal oder ein Schlüsselwort ist. Wenn ja, nehmen Sie den Kopf heraus und fügen Sie ihn ein SQL-Array. Wenn nicht, fahren Sie mit der Schleife durch die verknüpfte Liste fort.

Wenn die Verarbeitung das Ende der aktuellen Produktion erreicht (die Beurteilungsmethode ist choice>max), wird zu diesem Zeitpunkt ein „Übertrag“ versucht, d. h. die letzte Ziffer des aktuell aufgezeichneten Positionsarrays wird erhöht.

Beispiel: Das maximale Array ist 1 2 1 3, das Auswahlarray ist 0 0 0 3, dann ist das Auswahlarray nach dem Übertrag 0 0 1 0, was bedeutet, dass die letzte Position durchlaufen wurde und jetzt die vorletzte Position Es muss erhöht werden, und die letzte Position ist Null. Lesen Sie die nächste Permutation und Kombination weiter.

Der Generierungsprozess wird durch Rekursion implementiert. Für die folgende Produktion ist die Verarbeitungslogik beispielsweise wie in der Abbildung dargestellt:

show_tables_stmt: TABELLEN AB Name 'ZEIGEN.' Name mit_Kommentar
                | TABELLEN AUS Name mit_Kommentar anzeigen
                | TABELLEN ANZEIGEN mit_Kommentar

mit_Kommentar: MIT KOMMENTAR
            | %leerer

Name: ID ENT

 

Wählen Sie entsprechend dem aufgezeichneten Auswahlwert den Auswahlunterausdruck der Produktion aus, bis ein SQL generiert wird. Tragen Sie dann das Auswahlarray und fahren Sie mit der nächsten Auswahlrunde fort.

2. Zufällig

Der Zufallsgenerierungsmodus ähnelt dem Aufzählungsgenerierungsmodus, außer dass er nicht jedes Token in der Produktionskörperliste nacheinander durchläuft, sondern zufällig ein Token als Teil der SQL auswählt.

 

Ich beschloss , auf Open-Source -Industriesoftware zu verzichten – OGG 1.0 wurde veröffentlicht, das Team von Ubuntu 24.04 LTS wurde offiziell entlassen ". Fedora Linux 40 wurde offiziell veröffentlicht. Ein bekanntes Spieleunternehmen veröffentlichte neue Vorschriften: Hochzeitsgeschenke von Mitarbeitern dürfen 100.000 Yuan nicht überschreiten. China Unicom veröffentlicht die weltweit erste chinesische Llama3 8B-Version des Open-Source-Modells. Pinduoduo wird zur Entschädigung verurteilt 5 Millionen Yuan für unlauteren Wettbewerb. Inländische Cloud-Eingabemethode – nur Huawei hat keine Sicherheitsprobleme beim Hochladen von Cloud-Daten
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/5148943/blog/11054997
Empfohlen
Rangfolge