意味Calcite は、Sql を SqlNode に解析し、次に SqlNode を特定のデータベースの方言に変換することで、Sql を統一できます。 成し遂げるCalcite で方言変換を実装するための主なクラスは SqlDialect 基本クラスであり、その特定の変数の意味は次のとおりです。 パブリッククラスSqlDialect { BUILT_IN_OPERATORS_LIST: サポートされている組み込み関数または演算子 (例: abs など) // 識別子をリストします。 文字列 identifierQuoteString: 識別子の開始記号 文字列 identifierEndQuoteString: 識別子の終了記号 文字列 identifierEscapedQuote: (これが何をしているのかまだわかりません。文字列内のエスケープ文字のようなものでしょうか?) // 定数識別子 文字列 literalQuoteString: 定数開始記号 文字列 literalEndQuoteString: 定数終了記号 文字列 literalEscapedQuote: (これが何をしているのかまだわかりません。文字列内のエスケープ文字のようなものでしょうか?) DatabaseProduct databaseProduct: 所属するデータベース製品NullCollation nullCollation: ソートクエリを実行したときに null 値が返される順序RelDataTypeSystem dataTypeSystem: データ型 // 解析に関連Casing unquotedCasing: 大文字と小文字の変換Casing quotedCasing: 大文字と小文字の変換boolean caseSensitive: 大文字と小文字を区別するかどうか (列名が関数名を示す、など) } // メソッド領域 (異なるデータ ソースは、異なる詳細に基づいてカスタム レプリケーション メソッドを実装します) 許可する パーサーを構成する パーサーを構成する 非ASCII文字を含む 作成する デフォルトNull方向 空のコンテキスト クロスジョインの結合タイプをエミュレートする NullDirectionをエミュレートする エミュレートNullDirectionWithIsNull カレンダーポリシーを取得する キャストスペックを取得する 適合性を取得する データベース製品を取得する getNullCollation 製品を取得 引用符付き大文字小文字の取得 引用を取得 単一行テーブル名の取得 取得タイプシステム 引用符なし大文字小文字の取得 暗黙のテーブルエイリアスを持つ 識別子引用が必要 大文字と小文字を区別する 引用識別子 引用識別子 引用識別子 引用文字列リテラル 引用文字列リテラル 引用文字列リテラルUnicode 引用タイムスタンプリテラル アイテムからのエイリアスが必要 単一値表現の書き換え 集計関数をサポート エイリアス値をサポート CharSet をサポート データ型をサポート サポート機能 GroupByWithCube をサポート GroupByWithRollup をサポート 暗黙の型変換をサポート ネストされた集約をサポート OffsetFetch をサポート ウィンドウ関数をサポート パース解除呼び出し 日付時刻リテラルの解析 非解析フェッチAnsi 解析解除FetchUsingLimit 解析制限を解除 非解析オフセット 非解析オフセットフェッチ unparseSqlDatetimeArithmetic 非解析SQL間隔リテラル 非解析SQL間隔修飾子 上位Nを解析解除 引用文字列リテラル 使用方法デモ /** 「cast(column as type)」の型のSqlNodeを返します。 * 型名、精度などによりデータベースによって異なります。 * * <p>このメソッドがnullを返す場合、キャストは省略されます。デフォルトでは * 実装では、これはNULL型の場合であり、したがって * {@code CAST(NULL AS <nulltype>)} は {@code NULL} としてレンダリングされます。 */ パブリック SqlNode getCastSpec(RelDataType タイプ) このメソッドは、特定のデータ ソースのデータ型に応じてデータを変換するために使用できます。次に例を示します。 @Override パブリック SqlNode getCastSpec(RelDataType タイプ) { スイッチ (type.getSqlTypeName()) { VARCHARの場合: // MySQL には VARCHAR 型はなく、CHAR 型のみです。 int vcMaxPrecision = this.getTypeSystem().getMaxPrecision(SqlTypeName.CHAR); int 精度 = type.getPrecision(); (vcMaxPrecision > 0 && 精度 > vcMaxPrecision) の場合 { 精度 = vcMaxPrecision; } 新しいSqlDataTypeSpecを返します( 新しい SqlBasicTypeNameSpec(SqlTypeName.CHAR、精度、SqlParserPos.ZERO)、 SqlParserPos.ZERO); } super.getCastSpec(type) を返します。 } SQL の Cast ステートメントを使用して、特定の型にキャストできます。 最終的な文字列クエリ = "select cast(\"product_id\" as varchar(50)), \"product_id\" " + "\"製品\"から"; 最終的な文字列は "SELECT CAST(`product_id` AS CHAR(50)), `product_id`\n" です + "`foodmart`.`product` から"; // 解析された SqlNode sqlNode.toSqlString(CalciteSqlDialect.DEFAULT).getSql(); Apache Calcite で方言変換を実装するためのコードに関するこの記事はこれで終わりです。Apache Calcite の方言変換の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: モバイル端末の適応により、px は自動的に rem に変換されます。
>>: js での typeof の使い方を理解するための記事
序文仕事では、Linux 環境で操作する必要があることがよくあります。ここでは、win10 システム...
最近、nginx-ingress-controller のアプリケーションについて説明した公開アカウ...
目次1. プロジェクト構築2: ディレクトリ構造3: コンポジションAPI 4: 基本的な使い方:最...
導入前の記事で述べたように、NodeJS には 2 種類のスレッドがあります。1 つは、ユーザー リ...
目次1. 需要2. データベース設計3.Javaバックグラウンド構成の実装4. WeChatアプレッ...
目次序文1. ヌル合体演算子2. ??= 空代入演算子3. ?. オプション連鎖演算子4. ?: 三...
<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...
違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしてい...
Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...
Redis の紹介Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...
1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...
目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...
目次1. 機能紹介2. キーコード2.1 ホームページの機能2.2 製品情報を追加する2.3 データ...