Apache Calcite-Code zur Dialektkonvertierung

Apache Calcite-Code zur Dialektkonvertierung

Definition

Calcite kann SQL vereinheitlichen, indem es SQL in SqlNode analysiert und SqlNode dann in den Dialekt einer bestimmten Datenbank konvertiert.

erreichen

Die Hauptklasse zur Implementierung der Dialektkonvertierung in Calcite ist die SqlDialect-Basisklasse und ihre spezifischen Variablenbedeutungen sind wie folgt:

öffentliche Klasse SqlDialect {

BUILT_IN_OPERATORS_LIST: Unterstützte integrierte Funktionen oder Operatoren (zum Beispiel: abs und …)

// Bezeichner auflisten String identifierQuoteString: Das Startsymbol des Bezeichners String identifierEndQuoteString: Das Endsymbol des Bezeichners String identifierEscapedQuote: (Ich verstehe noch nicht, was das macht, wie ein Escape-Zeichen in einem String?)

// Konstanter Bezeichner String literalQuoteString: konstantes Startsymbol String literalEndQuoteString: konstantes Endsymbol String literalEscapedQuote: (Ich verstehe noch nicht, was das macht, wie ein Escape-Zeichen in einem String?)

DatabaseProduct databaseProduct: das Datenbankprodukt, zu dem es gehörtNullCollation nullCollation: die Reihenfolge, in der Nullwerte bei der Durchführung einer Sortierabfrage zurückgegeben werdenRelDataTypeSystem dataTypeSystem: Datentyp // im Zusammenhang mit der AnalyseCasing unquotedCasing: Groß-/Kleinschreibung konvertierenCasing quotedCasing: Groß-/Kleinschreibung konvertierenboolean caseSensitive: ob zwischen Groß- und Kleinschreibung unterschieden wird (Spaltenname gibt Funktionsnamen an usw.)
}
// Methodenbereich (verschiedene Datenquellen implementieren benutzerdefinierte Replikationsmethoden basierend auf unterschiedlichen Details)
erlaubt
configureParser
configureParser
enthältNonAscii
erstellen
StandardNullRichtung
leererKontext
emulierenJoinTypeForCrossJoin
Nullrichtung emulieren
emulierenNullDirectionWithIsNull
Kalenderrichtlinie abrufen
getCastSpec
getConformance
Datenbankprodukt abrufen
getNullCollation
Produkt abrufen
getQuotedCasing
Angebot anfordern
getSingleRowTableName
getTypeSystem
getUnquotedCasing
hatImplicitTableAlias
KennungBenötigtAngebot
isCaseSensitive
Zitat-Identifikator
Zitat-Identifikator
Zitat-Identifikator
ZitatStringLiteral
ZitatStringLiteral
ZitatStringLiteralUnicode
ZitatZeitstempelLiteral
erfordertAliasForFromItems
Einzelwertausdruck neu schreiben
unterstütztAggregateFunction
unterstütztAliasedValues
unterstütztCharSet
unterstütztDatentyp
unterstütztFunktion
unterstütztGroupByWithCube
unterstütztGroupByWithRollup
unterstütztImplicitTypeCoercion
unterstütztNestedAggregations
unterstütztOffsetFetch
unterstütztFensterfunktionen
Anruf auflösen
unparseDateTimeLiteral
unparseFetchUsingAnsi
unparseFetchUsingLimit
unparseLimit
Offset auflösen
unparseOffsetFetch
unparseSqlDatetimeArithmetic
unparseSqlIntervalLiteral
unparseSqlIntervalQualifier
unparseTopN
Anführungszeichen entfernenStringLiteral

VerwendungDemo

/** Gibt SqlNode für den Typ in "cast(column as type)" zurück, was sein könnte
  * unterscheidet sich zwischen Datenbanken hinsichtlich Typname, Genauigkeit usw.
  *
  * <p>Wenn diese Methode null zurückgibt, wird der Cast weggelassen. In der Standardeinstellung
  * Implementierung, dies ist der Fall für den NULL-Typ und daher
  * {@code CAST(NULL AS <nulltype>)} wird als {@code NULL} wiedergegeben. */
  öffentliche SqlNode getCastSpec(RelDataType-Typ)

  Mit dieser Methode können Daten entsprechend dem Datentyp der jeweiligen Datenquelle konvertiert werden, zum Beispiel:

  @Override public SqlNode getCastSpec(RelDataType Typ) {
    Schalter (Typ.getSqlTypeName()) {
    Fall VARCHAR:
      // MySQL hat keinen VARCHAR-Typ, nur CHAR.
      In diesem Beispiel wird die Variable SqlTypeName.CHAR als VCMaxPrecision-Wert angegeben.
      int Präzision = Typ.getPrecision();
      wenn (vcMaxPrecision > 0 und Präzision > vcMaxPrecision) {
        Präzision = vcMaxPrecision;
      }
      gibt neue SqlDataTypeSpec zurück (
          neue SqlBasicTypeNameSpec(SqlTypeName.CHAR, Präzision, SqlParserPos.ZERO),
          SqlParserPos.ZERO);
    }
    gibt super.getCastSpec(Typ) zurück;
  }

  Sie können die Cast-Anweisung in SQL verwenden, um es in einen bestimmten Typ umzuwandeln:

  letzte String-Abfrage = "select cast(\"product_id\" as varchar(50)), \"product_id\" "
       + "von \"Produkt\" ";
   endgültige Zeichenfolge erwartet = "SELECT CAST(`product_id` AS CHAR(50)), `product_id`\n"
       + "VON `foodmart`.`product`";
// Analysierter SqlNode
sqlNode.toSqlString(CalciteSqlDialect.DEFAULT).getSql();

Dies ist das Ende dieses Artikels über den Code zur Implementierung der Dialektkonvertierung in Apache Calcite. Weitere Informationen zur Dialektkonvertierung von Apache Calcite finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Leitfaden zur intensiven Nutzung von Vertica Integrated Apache Hudi
  • Detaillierter Prozess zum Einrichten der PHP + Apache-Betriebsumgebung auf dem Alibaba Cloud Server
  • Detaillierter Prozess zum Erstellen und Bereitstellen eines Apache Pulsar-Clusters
  • Apache Calcite für SQL-Parsing (Java-Codebeispiel)
  • Vorschläge zur Reproduktion und Behebung der Sicherheitslücke in Apache log4j2-RCE (CVE-2021-44228)
  • Apache Log4j2 meldet eine Sicherheitslücke auf Nuklearebene und eine schnelle Lösung
  • Hardcore-Analyse des flexiblen Payload-Mechanismus von Apache Hudi

<<:  Durch die Anpassung des mobilen Endgeräts wird px automatisch in rem umgewandelt

>>:  Ein Artikel zum Verständnis der Verwendung von typeof in js

Artikel empfehlen

So legen Sie einen Alias ​​für einen benutzerdefinierten Pfad in Vue fest

So konfigurieren Sie benutzerdefinierte Pfadalias...

Eine Screenshot-Demo basierend auf Canvas in HTML

Geschrieben am Anfang Ich erinnere mich, dass ich...

Einführung in die neuen Funktionen von MySQL 8.0.11

MySQL 8.0 für Windows v8.0.11 offizielle kostenlo...

jQuery implementiert das Bouncing-Ball-Spiel

In diesem Artikel wird der spezifische Code von j...

Integrierte Objekte, Werttypen und Referenztypen in JavaScript-Objekten erklärt

Inhaltsverzeichnis Objekt Objektdefinition Iterie...

So zeigen Sie verfügbare Netzwerkschnittstellen in Linux an

Vorwort Die häufigste Aufgabe nach der Installati...

Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Inhaltsverzeichnis Umweltbedingungen Aufgetretene...

Implementieren Sie eine einfache Suchmaschine auf Basis von MySQL

Inhaltsverzeichnis Implementierung einer Suchmasc...

Detaillierte Analyse und Prüfung von SSD-Leistungsproblemen in MySQL-Servern

【Frage】 Wir haben einen HP-Server. Wenn die SSD e...

Vue verwendet Drag & Drop, um einen Strukturbaum zu erstellen

In diesem Artikelbeispiel wird der spezifische Co...

Lösen Sie das Problem des Syn Flooding in der MySQL-Datenbank

Der SYN-Angriff ist die häufigste und am leichtes...