DefinitionCalcite kann SQL vereinheitlichen, indem es SQL in SqlNode analysiert und SqlNode dann in den Dialekt einer bestimmten Datenbank konvertiert. erreichenDie 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:
|
<<: Durch die Anpassung des mobilen Endgeräts wird px automatisch in rem umgewandelt
>>: Ein Artikel zum Verständnis der Verwendung von typeof in js
1. Voraussetzungen Da ich es schon mehrmals insta...
In diesem Artikelbeispiel wird der spezifische Co...
Einfache Beschreibung Da es zuvor mit Centos7 ers...
Inhaltsverzeichnis Szenario Wirkung Code Zusammen...
Ergebnisse erzielen Umsetzungsideen Der Schmelzef...
mysqldump-Befehl Einführung: Ein Datenbank-Backup...
<br />Wenn Sie sich diesen Titel ansehen, ko...
Das Team ersetzte den neuen Rahmen. Alle neuen Un...
Als Backend-Programmierer haben Sie an vielen Ste...
Verwendung von Anker-Tags: Als Ankerlink wird ein ...
Verwenden Sie die Vue-Cropper-Komponente, um Avat...
1. SHOW PROCESSLIST-Befehl SHOW PROCESSLIST zeigt...
VMware-Version: VMware-Workstation-Full-16 VMware...
Das <label>-Tag definiert eine Bezeichnung (...
Der Systemleistungsexperte Brendan D. Gregg hat s...